2012-01-31 172 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应该能够访问所有文件,并且应该解决错误。