【问题标题】:PHPExcel is showing error on Remote ServerPHPExcel 在远程服务器上显示错误
【发布时间】:2014-05-26 19:08:53
【问题描述】:

我在我的 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 文件。这是我遇到错误的流程。

【问题讨论】:

  • 你设置包含路径了吗

标签: php phpexcel


【解决方案1】:

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

【讨论】:

  • 是的。我的索引文件中有一个自动加载器。但是相同的代码正在本地主机上运行。为什么我在本地服务器上没有任何错误?
  • 我无法解释你的服务器和本地主机之间的区别;但我确实认识到自动加载器冲突
  • 再次出现同样的错误:(我已经根据流程修改了我的问题。如果我做错了什么,请检查并纠正我。
【解决方案2】:

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

【讨论】:

  • 但是相同的代码在本地服务器上运行良好。这怎么可能?
  • PHPExcel_Shared_String.class.php 的完整文件路径是什么?路径(或您的 include_path 设置)可能不同。
【解决方案3】:

问题是自动加载器可能会发生冲突。您需要检查以确定您的自动加载器是否正在尝试加载 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)你会发现它工作正常。

【讨论】:

    【解决方案4】:

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

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

    include_once 'PHPExcel/PHPExcel.php';
    

    然后一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多