1

所以我今天遇到了一件非常奇怪的事情。

我已将我的 PHP APC 更新到最新版本并重新启动了 apache。然后突然 apache 中的所有脚本开始抱怨无法找到所需的文件。

我通常会有:

require_once 'Abstract.php'

考虑到 Abstract.php 与其他脚本位于同一目录中。

错误在哪里:

PHP警告:require_once(Abstract.php)[function.require-once]:无法打开流:第411行的data.php中没有这样的文件或目录 PHP致命错误:require_once()[function.require]:需要打开失败'Abstract.php' (include_path='/var/www/application/../library:/var/www/library:.:/usr/share/php:/usr/share/pear') 在 data.php 上411行

如您所见,当前目录 (.) 包含在执行的 include_path 中。为什么会这样?有人见过吗?

4

2 回答 2

1

AFAIK,.表示 PHP 二进制文件所在的目录。require*include*函数考虑到当前工作目录,可以通过chdir().

正如cwallenpoole所建议的,尝试使用__DIR__常量:

require_once __DIR__ . '/Abstract.php';

如果这也失败了,则意味着其他地方存在错误配置。如果有效,则可能意味着当前正在执行的 PHP 线程将其工作目录设置为不同的,您需要更改当前工作目录或修改require语句以使用绝对路径。

另外,您是否考虑过使用自动加载回调?这样你就有了一个单一的入口点来搜索类。

于 2011-05-12T09:00:02.470 回答
0

好的,我最终想通了,尽管我应该分享一下,以防其他人遇到和我一样的麻烦。

我曾经有 APC 3.0.x 并升级到 3.1.8。看起来 3.1.8 上的 APC 有一个错误,它破坏了 PHP 的包含/要求。

在此处查看相关链接:http: //pecl.php.net/bugs/bug.php ?id=22687

感谢大家的快速反馈:)

于 2011-05-13T07:22:51.013 回答