PHP 突然停止搜索当前目录中的文件


PHP Suddenly stop searching for files in current directory

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

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

我通常会有:

require_once 'Abstract.php'

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

错误,其中:

PHP 警告: require_once(摘要.php) [函数.require-once]: 无法打开流:没有此类文件或 数据中的目录.php在第 411 行 PHP 致命错误: require_once() [函数要求]: 打开失败需要"摘要.php" (include_path='/var/www/application/../library:/var/www/library:.:/usr/share/php:/usr/share/pear') 在数据中.php在第 411 行

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

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

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

require_once __DIR__ . '/Abstract.php';

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

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

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

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

请参阅此处的相对链接:http://pecl.php.net/bugs/bug.php?id=22687

感谢大家的快速反馈:)