2013-10-22 54 views
9

当我尝试创建PDF发票(因为我的客户端运行PHP 5.4.19)时,Magento抛出PHP错误。Magento PHP 5.4 PDF发票Zend错误

Fatal error: Declaration of Zend_Pdf_FileParserDataSource_File::__construct() must be compatible with Zend_Pdf_FileParserDataSource::__construct() in /var/www/vhosts/website/httpdocs/includes/src/Zend_Pdf_FileParserDataSource_File.php on line 41

通常很容易通过编辑FileParserDataSource.php和注释掉两行解决这个问题,问题是,他们运行的扩展这个脚本(http://pastebin.com/J64VNsRP)一Zend_Pdf_FileParserDataSource_File.php。

是否有任何解决方案可用于在运行PHP 5.4的服务器上使用Magento创建PDF发票?

回答

6

这是zend核心问题http://framework.zend.com/issues/browse/ZF-12093。注释掉__construct__destruct方法lib/Zend/Pdf/FileParserDataSource.php

// abstract public function __construct(); 

    /** 
    * Object destructor. Closes the data source. 
    * 
    * May also perform cleanup tasks such as deleting temporary files. 
    */ 
// abstract public function __destruct();` 
+0

这是不可能的,因为第二个文件。 – Hidde

+0

@Hidde,第二个文件的意思是? –

+0

如果我注释掉函数__construct();和函数__destruct();在lib/Zend/Pdf/FileParseDataSource.php中没有任何变化,因为FileParseDataSource.php被Zend_Pdf_FileParserDataSource_File.php扩展。如果我也将该文件中的代码注释掉,我会得到一个“包含2个抽象方法,因此必须声明为抽象或实现其余方法”错误。 – Hidde

37

这个PHP版本5.4.4和Zend Framwork之间的不兼容问题,解决它。

通过修改这个函数lib/Zend/Pdf/FileParserDataSource.php来修复它。

变化

abstract public function __construct(); 

abstract public function __construct($filePath); 
+0

工程就像一个魅力!谢谢。 –

+0

这应该是公认的答案btw。 – fbtb

+0

是的,这个工程! – Guus

1

你将不得不改变的lib/Zend公司/ PDF/FileParserDataSource.php和lib/Zend公司/ PDF/FileParserDataSource/File.php

找到

   abstract public function __construct(); 
在FileParserDataSource

。 PHP和它更改为

   abstract public function __construct($filePath); 

而且也是在File.php做同样

   public function __construct() 

皈依

   public function __construct($filePath) 

这为我工作。我希望它有帮助。