1

我在我的 php 类中使用 PHPExcel 来生成一个 xls 文件。代码在我的本地主机上完美运行,但在远程服务器上显示错误。

错误是:

 <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

4 回答 4

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 的自动加载器共存。

于 2013-07-18T10:13:49.890 回答
0

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

错误消息是说在你的第 13 行index.php它不能包含来自这里的文件

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

也无法在这里找到文件:

/home/example/../inc/classes/Classes/inc/classes/PHPExcel_Shared_String.class.php
于 2013-07-18T10:10:06.947 回答
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),您会发现它工作正常。

于 2014-01-22T01:47:36.243 回答
0

“打开'inc/classes/PHPExcel_Shared_String.class.php'失败”我遇到了同样的问题。它在本地(Mac)运行良好,但在 linux 上运行良好。解决方案是使用大写“PHPExcel”的拼写。我将其更改为“phpexcel”,与 php 中的包含相同。这产生了这个错误。

让文件夹拼写为 'PHPExcel' 而不是 'phpexcel' 并在 php 中也包含大写字母

include_once 'PHPExcel/PHPExcel.php';

然后一切正常。

于 2014-05-26T11:08:53.843 回答