我已经将PHPExcel用于我的codeigniter应用程序并且它在localhost中运行良好,但是当我将其托管到服务器时,我收到以下错误:
致命错误:\ xx \ xx \ xx中找不到类'PHPExcel_Shared_String' 第36行的third_party \ PHPExcel \ Autoloader.php
答案 0 :(得分:3)
最新版本的PHPExcel中的自动加载器引入了一项更改,该更改似乎与PHP的版本向后兼容< 5.3.0
如果您编辑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版本并执行相应的行
虽然这不是故意的,但请注意我们确实试图让用户升级到至少版本5.3.0的PHP,因为我们无法解决使用大型电子表格的用户的任何内存/性能问题抱怨,直到我们可以使用更新版本的PHP中提供的一些新功能。不再支持PHP 5.2版本,甚至版本5.3也不会在今年年底之前得到支持
答案 1 :(得分:1)
在Linux和PHP 5.4x下长期困扰这个问题。最后,除了上面的修复之外,我还使用了更改Autoloader文件第73行的代码,该文件将$ pClassFilePath变量从相对(使用PHPEXCEL_ROOT)设置为机器文件树之后的绝对值。这可能只是一个黑客攻击,但经过几天的尝试,它保存了我的理智。希望这有助于某人。干杯
答案 2 :(得分:0)
我也有这个问题,我通过改变"共享"的权限来解决它。目录为655。
我希望它有所帮助
答案 3 :(得分:0)
如果您的服务器位于 Linux ,则可能是权限问题...只需在供应商(服务器端)添加 PHPExcel 文件夹的所有权限,然后所有子文件夹。我有同样的问题,我已经通过这种方式解决了......
答案 4 :(得分:0)
对我有用的是将PHPExcel/Autoloader.php
的第81行更改为
if ((file_exists($pClassFilePath) === FALSE) || (is_readable($pClassFilePath) === FALSE)) {
到
if ((stream_resolve_include_path($pClassFilePath) === FALSE)) {
我更喜欢这种方法,因为它不需要我修改文件权限,并且可以在PHP 5.3.2和更高版本中使用。