2012-01-31 176 views
2

我也遇到了這個錯誤PhpExcel:致命錯誤:類 'PHPExcel_Shared_ZipStreamWrapper'

Fatal error: Class 'PHPExcel_Shared_ZipStreamWrapper' not found in \VBOXSVR\ACACIASOFT\apc\spreadsheet\lib\phpexcel\PHPExcel\Autoloader.php on line 29

我currrent設置是: 主機:Windows 7的 :這是我從SVN看看我的解決方案

虛擬客機客戶機: :Windows XP :其中我的apache,php,mysql安裝。 :我還在我的虛擬盒子上添加了共享目錄,以便我將其用作文檔位置

當我更改documentroot時,我的兩難問題就開始了。它會給我的phpexcel模塊帶來錯誤,但是當我將documentmentroot c:/ program files/apache更改回來時....將項目複製到此目錄。這不會帶來任何錯誤。

回答

0

您必須在PHP擴展使拉鍊DLL

+0

如何做到這一點,請詳細說明。 – 2014-08-09 14:47:22

+1

沒有解釋沒有幫助 – Saqib 2014-09-22 07:15:41

4

看起來像是在運行一些其他自帶加載程序的庫,它會干擾PHPExcel自動加載程序。最新的SVN代碼已被修改以防止此問題。

在/Classes/PHPExcel/Autoloader.php腳本本身,更改:

public static function Register() { 
    return spl_autoload_register(array('PHPExcel_Autoloader', 'Load')); 
} // function Register() 

public static function Register() { 
    if (function_exists('__autoload')) { 
     // Register any existing autoloader function with SPL, so we don't get any clashes 
     spl_autoload_register('__autoload'); 
    } 
    // Register ourselves with SPL 
    return spl_autoload_register(array('PHPExcel_Autoloader', 'Load')); 
} // function Register() 
+1

從spl_autload_register中刪除true,true解決了我的問題。 – 2014-07-23 20:08:19

14

同樣的問題一直嘮叨我一整天都要死。 我發現,如果你有自己的自動加載功能以前用SPL註冊,那麼你就必須要在事件返回假磁帶自動加載機無法加載所需的類,像這樣:

spl_autoload_register('my_autoload'); 
function my_autoload($className) 
{ 
    if(file_exists(CLASS_PREFIX.".$className.php")) 
    { 
     require_once(CLASS_PREFIX.".$className.php"); 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

thanx很多!!!節省我一整天的時間! – Nico 2013-01-02 10:08:12

+0

夥計,你爲我節省了很多時間! – vikingmaster 2013-08-11 12:47:19

+0

@Jari我應該在哪裏添加此代碼? – 2013-09-24 16:14:28

0

好我知道這已經是一年前了,但是因爲這個問題發生在我的設置(虛擬機在具有明確用戶權限的Active Directory網絡中運行Windows 7 Professional的虛擬機),幾天前我想分享我的解決方案,也許這會幫助其他人節省一些時間:

我想通了2個問題(只在WINDOWS個HOSTS):

  • 的PHPEXCEL_ROOT恆壓與錯誤的目錄分隔符

我的解決方案定義爲:改變PHP代碼使用DIRECTORY_SEPARATOR不斷在文件中defitinions :PHPExcel .PHP(約32線)是這樣的:

​​

還有2個文件來改變: 「IOFactory.php」 和 「的settings.php」(第34行),用於:

//OLD: define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../'); 
define('PHPEXCEL_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR); 
  • PHP函數「is_readable」並不總是在Windows主機返回正確的結果,在我的情況下,文件是可讀的,但結果是

我的解決方法:要解決這個Bug,你可以刪除文件「autoload.php」變線77的「is_readable」檢查:

// if ((file_exists($pClassFilePath) === FALSE) || (is_readable($pClassFilePath) === FALSE)) { 
if (file_exists($pClassFilePath) === FALSE) { 
2

如果有人碰巧是在Linux上,那麼這個錯誤可能是由不正確的使用權限引起的。

我有同樣的問題,但我更改了'共享'文件夾的所有者,並將其設置爲'www-data'用戶,這是我係統上的apache用戶(chown www-data:www-數據共享)。這種固定的「類‘PHPExcel_Shared_ZipStreamWrapper’未找到」錯誤。

然而,這不是完整的修復,你真正需要做的是確保分配給正確的用戶在PHPExcel文件夾中的文件夾和文件,他們有正確的權利。這裏是你如何做到這一點:

您需要分配PHPExcel文件夾,每一個項目在它的www數據用戶,以便Apache可以訪問這些文件。確保您的PHPExcel文件夾下一級,然後運行以下命令:

sudo chown -R www-data:www-data PHPExcel 

就是這樣。 Apache應該能夠訪問所有文件,並且應該解決錯誤。