【问题标题】:PHP if(!@include_once()) doesn't workPHP if(!@include_once()) 不起作用
【发布时间】:2018-12-02 16:00:02
【问题描述】:

这是有效的,然后停止了。那是最新的 7.2.6 版本。

if(!@include_once('config.php')) {
    echo 'failed';
}

所以我们已经降级到 7.1.9,但它在那里也不起作用。

没有抛出错误,什么都没有。只是一个空白屏幕。就好像它根本不存在一样……

如果我在此之前回显某些内容,它会起作用。如果我在此之后回显某些内容,则不会发生任何事情。

为什么会这样?

【问题讨论】:

  • 那么您的 http 服务器错误日志文件揭示了发生了什么?
  • @arkascha PHP 日志文件 /var/log/php_errors.log 中没有任何内容。 HTTP 返回 200。难以置信。以前在 PHP 中从未见过这样的事情。
  • 尝试删除@
  • 当然没有报错!你用@ 压制了它
  • 另外,如果你想在无法包含文件的情况下抛出错误,你可以使用requirerequire_once

标签: php


【解决方案1】:

你认为@ 到底是做什么的?它抑制错误。所以当你说There is no error thrown, nothing时,这完全是意料之中的,因为如果有任何错误,@可能会压制它们。删除@,如果你不能信任你的 php.ini 设置,也可以调用 ini_set,也可以在一些调试打印中设置,例如

ini_set("error_reporting","-1");
echo "before include.";
if(!include_once('config.php')) {
    echo 'failed';
}
echo "after include";

然后在执行后检查您的错误日志。

【讨论】:

    【解决方案2】:

    也许您可以尝试有关此页面上“示例 #4”的建议,看看是否有所不同? http://php.net/manual/en/function.include.php

    例如

    if ((@include_once 'config.php') === FALSE) { 
        echo "failed";
    }
    

    顺便说一句:正如其他人所说,@ 抑制了应用它的代码行的 PHP 警告/错误。

    我对您的问题的解释是,您故意使用@ 来抑制引擎的警告并回显您自己的消息。如果您删除了 @ 并且包含失败,如果错误设置为显示,我希望看到警告消息输出,并且之后“失败”一词仍应为 echoed。

    【讨论】:

      【解决方案3】:

      我就是这样解决的。

      if (!(@include 'config.php')) { die(json_encode(array('error'=>true))); }
      

      我需要抑制错误,因为我不想在不破坏我的脚本的情况下处理错误——以一种让另一端知道这是一个错误并将通知前端用户的方式。

      【讨论】:

        猜你喜欢
        • 2016-02-24
        • 2016-11-15
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 2018-10-04
        • 1970-01-01
        相关资源
        最近更新 更多