【问题标题】:intermittent - PHP Warning: include failed to open stream: No such file or directory间歇性 - PHP 警告:包括未能打开流:没有这样的文件或目录
【发布时间】:2016-06-02 23:18:55
【问题描述】:

我有一个间歇性问题,错误包括无法打开流...

99.9% 的时间包含完美运行,但在一天的高峰时间,我注意到我的 php 错误日志中开始出现错误。

PHP 警告:include ('database.php') 无法打开流:没有这样的文件或目录

我只有一个包含此文件的文件,所以我完全了解它的工作原理,我们每天有几千个请求没有问题,但在这数千个请求中,我们似乎每天大约有 10 个只是失败并显示错误 PHP 警告:include ('database.php') failed to open stream: No such file or directory

它把我逼疯了! - 我已经进行了一些挖掘,以查看同时从 IIS 服务器请求的其他内容,我可以看到我正在调用一个单独的 php 文件,该文件与上述文件无关。它只是计算我的 php 错误日志中的行数,如果有问题,它会发送电子邮件....

我想知道是否由于某种原因存在某种文件进程限制,这意味着如果错误日志足够大,下面的代码正在对 PHP 执行某些操作以阻止它在其他地方完成文件进程,例如包含...

这段代码的基础是:-

function getLines($file)
{
    $f = fopen($file, 'rb');
    $lines = 0;

    while (!feof($f)) {
        $lines += substr_count(fread($f, 8192), "\n");
    }

    fclose($f);

    return $lines;
}

$phpcount = getLines("c:/windows/temp/php-errors.log");

我想知道是否由于某种原因存在某种文件进程限制,这意味着如果错误日志太大,上述代码会出现问题,并且 PHP 会停止在其他地方完成文件进程,从而导致我的包含问题...

【问题讨论】:

  • 在这些高峰时段您的硬盘使用量是多少
  • 我刚刚比较了硬盘驱动器的利用率与发生错误时的情况。它的范围在 7% 和 17% 之间。其他地方也有一些高峰,但上周没有超过 40%
  • 你能发布完整的错误信息吗?意思是,哪个文件触发了它?
  • 有什么要检查的吗?执行包含的代码中的路径。即include ('database.php')。确保路径是绝对文件路径?即__DIR__ .'/dtabase.php';。如果 is 是相对路径,则有时可能会更改“当前工作目录”。此外,出于同样的原因,该文件中使用的$file 应该是绝对文件路径。即 imo,永远不要在 php 中使用相对文件路径。注意:您可以使用相对目录作为绝对文件路径的一部分。

标签: php


【解决方案1】:

我的猜测是错误来自文件中的包含,该文件仅不时被调用。它可能是计算日志文件行数的文件,也可能是发送电子邮件的文件。

根据this checklist,错误似乎是有问题的文件试图使用相对路径包含database.php,但由于当前工作目录不同而失败。

如清单中所述,解决方案是改用绝对路径。

在任何情况下,您都应始终在包含中使用绝对路径。很有可能解决问题。

【讨论】:

    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2014-01-04
    • 2016-07-24
    • 2018-09-24
    相关资源
    最近更新 更多