【问题标题】:Fatal error: Class 'PHPExcel_Shared_String' not found致命错误:找不到类“PHPExcel_Shared_String”
【发布时间】:2014-09-27 21:08:22
【问题描述】:

我在我的 codeigniter 应用程序中使用了 PHPExcel,它在 localhost 中运行良好,但是当我将它托管到服务器时,我收到以下错误:

致命错误:在 \xx\xx\xx 中找不到类 'PHPExcel_Shared_String' 第 36 行的third_party\PHPExcel\Autoloader.php

【问题讨论】:

  • 你是否在windows上开发并部署到nix?
  • 其他一切正常还是..?
  • 你确定把完整的phpExcel库结构复制到了直播服务器上
  • 这里的问题是您的本地环境和生产环境之间的不一致 - 您需要确保两个环境都满足您的依赖要求,即。确保所有必需的库都存在并加载。
  • 你运行的是什么版本的 PHP?

标签: php codeigniter export-to-excel phpexcel


【解决方案1】:

在最新版本的 PHPExcel 中引入了自动加载器的更改,似乎破坏了与 PHP

如果您编辑 Classes/PHPExcel/Autoloader.php 文件并更改第 58 行,则应为

return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'), true, true);

return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));

我已经对github上的develop分支进行了更改,以测试PHP版本并执行相应的行

虽然这不是故意的,但请注意,我们确实在努力让用户至少升级到 PHP 5.3.0 版本,因为我们无法解决用户使用大型电子表格时的任何内存/性能问题抱怨直到我们可以使用 PHP 较新版本中提供的一些新功能。 PHP 5.2 版本不再受支持,甚至 5.3 版本已停产,今年年底前将不再支持

【讨论】:

  • 我们对它非常着迷,因为它非常有用,当与其他库集成时,即使在不需要时也不需要包含每一个东西(以保持低内存使用率).. . 这并不意味着添加新问题,除非人们不知道他们在做什么......而自动加载器意味着您只需要包含一个 php 文件
  • 这个问题不是自动加载器问题,而是向后兼容性问题
  • autoloader 解决了一个非问题:一个库可能附带大量的 php 文件,它应该有一个名为 include.php 的文件,其中包含它自己的文件。为了使用这样的库,只需包含该单个文件。就这么简单
  • 你为什么要从单个包含的文件中加载每个单独的文件,无论你是否需要它?这非常浪费内存,而且效率极低...... /跨度>
  • 就目前而言,PHPExcel 库提供了一个包含在自动加载器中的单个文件......所以不是那么简单吗?
【解决方案2】:

在 Linux 和 PHP 5.4x 下为这个问题苦苦挣扎了很长时间。最后,除了上面的修复之外,我还更改了 Autoloader 文件第 73 行的代码,该代码将 $pClassFilePath 变量从相对(使用 PHPEXCEL_ROOT)设置为绝对跟随机器文件树。这可能只是一个 hack,但经过几天的尝试,它挽救了我的理智。希望这可以帮助某人。干杯

【讨论】:

    【解决方案3】:

    我也遇到了这个问题,我通过将“共享”目录的权限更改为 655 解决了这个问题。

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      如果您的服务器在 Linux 上,则可能是权限问题...只需在您的供应商(服务器端)和 中添加 PHPExcel 文件夹的所有权限>所有子文件夹。我有同样的问题,我已经通过这种方式解决了......

      【讨论】:

        【解决方案5】:

        对我有用的是将PHPExcel/Autoloader.php line 81 从

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

        if ((stream_resolve_include_path($pClassFilePath) === FALSE)) {
        

        我更喜欢这种方法,因为它不需要我修改文件权限,它应该可以在 PHP 5.3.2 及更高版本中使用。

        【讨论】:

          猜你喜欢
          • 2014-10-03
          • 1970-01-01
          • 2011-09-08
          • 2011-12-17
          • 2018-12-21
          • 2012-11-21
          • 2015-03-20
          • 2015-03-28
          • 2014-03-13
          相关资源
          最近更新 更多