PhpExcel:致命错误:类'PHPExcel_Shared_ZipStreamWrapper'

时间:2012-01-31 00:12:24

标签: php virtualbox phpexcel

我遇到了这个错误

  

致命错误:第29行\ VBOXSVR \ ACACIASOFT \ apc \ spreadsheet \ lib \ phpexcel \ PHPExcel \ Autoloader.php中找不到类'PHPExcel_Shared_ZipStreamWrapper'

我的设置是: 主机:Windows 7              :这是我从svn

查看我的解决方案的地方

Virtual Box Guest Machine:              :Windows XP              :我的apache,php,mysql安装在哪里。              :我还在我的虚拟盒子上添加了共享目录,以便我将其用作documentroot位置

当我改变文件记录时,我的困境开始了。它会给我的phpexcel模块带来错误,但是当我更改了文档c:/ program files / apache ....将项目复制到此目录。这不会带来任何错误。

5 个答案:

答案 0 :(得分:14)

同样的问题一直困扰着我。 我发现如果您之前使用spl注册了自己的自动加载器功能,那么如果自动加载器无法加载所需的类,则必须返回false ,如下所示:

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;
    }
}

答案 1 :(得分: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()

答案 2 :(得分:2)

如果有人碰巧在Linux上,则此错误可能是由错误的使用权限引起的。

我有同样的问题,但我更改了'Shared'文件夹的所有者,并将其设置为'www-data'用户,这是我系统上的apache用户(chown www-data:www-data共享)。这修复了“Class'PHPExcel_Shared_ZipStreamWrapper'找不到”错误。

然而,这不是完整的修复,您真正需要做的是确保将PHPExcel文件夹中的文件夹和文件分配给正确的用户,并确保它们具有正确的权限。这是你如何做到的:

您需要将PHPExcel文件夹及其中的每个项目分配给www-data用户,以便Apache可以访问这些文件。确保您位于PHPExcel文件夹下一级,然后运行此命令:

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

就是这样。 Apache应该能够访问所有文件,并且应该解决错误。

答案 3 :(得分:0)

你必须在php扩展名上启用zip dll

答案 4 :(得分:0)

好的我知道它已经在一年前了,但是因为这个问题发生在我的设置(在具有明确用户权限的Active Directory网络中运行Windows 7 Professional的虚拟机),几天前我想分享我的解决方案,也许这将有助于其他人节省一些时间:

我发现了2个问题(仅限 WINDOWS HOSTS!):

  • PHPEXCEL_ROOT-Constant定义了错误的目录分隔符

我的解决方案:更改php代码以在默认情况下使用DIRECTORY_SEPARATOR常量 在文件中:PHPExcel.php(第32行),像这样:

//OLD: define('PHPEXCEL_ROOT', dirname(__FILE__) . '/');
define('PHPEXCEL_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);

还有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主机上返回正确的结果,在我的情况下,文件是可读的,但结果是 false

我的替代方法:要解决此问题,您可以删除文件“autoload.php”中的“is_readable”检查更改第77行:

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