我在我的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文件。这是我收到错误的流程。
答案 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';
然后一切正常。