PHPExcel在远程服务器上显示错误

时间:2013-07-18 10:06:53

标签: php phpexcel

我在我的php类中使用PHPExcel来生成xls文件。代码完全适用于我的localhost,但在远程服务器上显示错误。

错误是:

 <br />
<b>Warning</b>:  include(inc/classes/PHPExcel_Shared_String.class.php): failed to open stream: No such file or directory in <b>/home/example/../index.php</b> on line <b>13</b><br />
<br />
<b>Warning</b>:  include(): Failed opening 'inc/classes/PHPExcel_Shared_String.class.php' for inclusion (include_path='.:/usr/share/pear:/home/example/../inc/classes/Classes/') in <b>/home/example/../index.php</b> on line <b>13</b><br />

我一直在互联网上搜索并找到了更新php版本并启用一些php库的解决方案,但是我的远程服务器上已经更新了。谁能告诉我这些错误在远程服务器上出现的原因是什么?

我正在使用index.php文件,其中我有一个默认的__autoloader()函数来加载所有.class文件和另一个名为excelgenerate.php的文件,其中我再次使用相同的自动加载器来加载该类文件。在这个文件中,我有一个函数,我使用PHPExcel代码通过包含PHPExcel.php来生成excel文件。这是我收到错误的流程。

4 个答案:

答案 0 :(得分:5)

PHPExcel文件不是

PHPExcel_Shared_String.class.php

它是

PHPExcel/Shared/String.php

看起来您可能有一个与PHPExcel自动加载器发生冲突的自动加载器:尝试使用SPL_autoload_register()

修改

引用PHP文档(开发人员文档的第3.2节)

PHPExcel实现自动加载器或“延迟加载器”,这意味着不必在PHPExcel中包含每个文件。只需要包含初始PHPExcel类文件,然后自动加载器将在需要时包含其他类文件,因此只有脚本实际需要的那些文件才会加载到PHP内存中。这样做的主要好处是它减少了PHPExcel本身的内存占用,因此它使用更少的PHP内存。

如果您自己的脚本已经定义了自动加载功能,那么这可能会被PHPExcel自动加载功能覆盖。例如,如果您有:

function __autoload($class) {
    ...
}

请改为:

function myAutoload($class) {
    ...
}
spl_autoload_register('myAutoload');

然后,您的自动加载器将与PHPExcel的自动加载器共存。

答案 1 :(得分:0)

PHPExcel_Shared_String.class.php的完整文件路径是什么?

错误消息说明在index.php的第13行,它不能包含此处的文件

/home/example/../inc/classes/PHPExcel_Shared_String.class.php

也无法在此处找到该文件:

/home/example/../inc/classes/Classes/inc/classes/PHPExcel_Shared_String.class.php

答案 2 :(得分:0)

问题是自动加载器可能会发生冲突。您需要检查以确定您的自动加载器是否正在尝试加载PHPExcel文件。在我的情况下就是这种情况。

PHPExcel自动加载器做得很好,但我的自动加载器也进入了行为,它失败了。我输入了代码(从PHPExcel的自动加载器中窃取),检查以确保我的自动加载器只是尝试自动加载我的代码。

因此,例如,在PHPExcel中,自动加载器以:

开头
if ((class_exists($pClassName,FALSE)) || (strpos($pClassName, 'PHPExcel') !== 0)) {
    //    Either already loaded, or not a PHPExcel class request
    return FALSE;
}

如果你做类似的事情(或检查NOT PHPExcel),你会发现它工作正常。

答案 3 :(得分:0)

我遇到了与#34相同的问题;未能打开&c; inc / classes / PHPExcel_Shared_String.class.php&#39;&#34;。它在本地(Mac)运行良好,但在Linux上不是远程的。解决方案是使用PHPExcel&#39;大写的拼写。我将其更改为&#39; phpexcel&#39;,与php中的include相同。这会产生此错误。

让文件夹拼写&#39; PHPExcel&#39;不是&#39; phpexcel&#39;并在php中包含大写字母

include_once 'PHPExcel/PHPExcel.php';

然后一切正常。