【问题标题】:PHP set warnings as fatalPHP 将警告设置为致命
【发布时间】:2011-03-15 03:24:25
【问题描述】:

有没有办法在 php.ini 或 apache 级别指定脚本执行应在任何警告时停止?我尝试通过 google 和 stackoverflow 进行搜索,但尚未找到任何相关信息。我确实知道 set_error_handler() 函数,但我希望在 php.ini 级别执行此操作。

【问题讨论】:

  • 你为什么要这么奇怪的行为?
  • 我不想要它,我想确保它是不可能的。

标签: php apache configuration


【解决方案1】:

2021 年 9 月编辑: OP 不希望像我建议的那样使用自定义错误函数来解决这个问题,但是这个问题得到了一些非常满意使用自定义错误函数的人的访问量。

// Custom error function (even triggers for warnings)
set_error_handler(function($severity, $message, $file, $line) {
    if (error_reporting() & $severity) {
        throw new ErrorException($message, 0, $severity, $file, $line);
   }
});

在我使用这段代码的项目中,我做了这个小助手函数来在项目的不同部分进行切换。可能的值是 0、1 和 2

function updateErrorHandling($state) {
    //custom error handler or standard
    if ($state > 1) {
        // Custom error function (even triggers for warnings)
        set_error_handler(function($severity, $message, $file, $line) {
            if (error_reporting() & $severity) {
                throw new ErrorException($message, 0, $severity, $file, $line);
            }
        });
    } else {
        // Standard Exception Handling on / off
        ini_set('display_errors', $state);
        ini_set('display_startup_errors', $state);
        error_reporting($state == 1 ? E_ALL : 0);
    }
}

【讨论】:

    【解决方案2】:

    我会推荐xdebug.halt_level

    【讨论】:

      【解决方案3】:

      AFAIK,没有办法在配置级别做类似的事情。不过,我认为可以使用 PHP 的 set_error_handler 函数来完成。

      http://php.net/manual/en/function.set-error-handler.php

      在您设置的函数内,可以通过ERROR_TYPE参数检测警告,并使用exitdie停止脚本。

      【讨论】:

      • 请正确阅读问题。我已经补充说我知道 set_error_handler 函数,但需要在 php.ini 级别进行设置。无论如何感谢您的回答。
      • 请阅读答案,另一个答案:没有办法做你所要求的。答案试图提供您正在寻找的行为,如果不是通过您想要的方式。
      • @ChrisHenry - 你的意思是“AFAIK”吗?
      【解决方案4】:

      因此,像往常一样,要像您所要求的那样证明是否定的有点困难。大约 14 秒的谷歌搜索产生了完整的 php.ini 指令列表:

      http://www.php.net/manual/en/ini.list.php

      此页面上只有 4 个“警告”一词的实例,所以看起来这种奇特的想法是不可行的。

      【讨论】:

      • 虽然我不同意您的搜索方法(停止很可能属于更一般的类别,而不是“警告”一词),但我同意这是一个异国情调的想法:- ).. 只是想确保生产服务器上的警告消息永远不会影响我的脚本执行...谢谢。
      • 我想你是对的,如果我正在发射航天飞机,我会付出更多的努力来确保不存在其他指令在切换时可能导致这种行为并伪装成无辜的东西。 :-) 只是想向您建议我会寻找的地方,并举例说明我将如何寻找它。就像我说的,如果不测试或查看代码,很难证明是否定的。您也可以 grep php.ini 因为,特别是在 5.3 中有大量 cmets,如果您要查找的内容存在,它的注释可能包含警告或 hault。
      • 这不是关于如何使警告停止解释器的答案。我认为正确的答案是它是 PHP 的限制。没有配置选项可以在所有错误上停止解释器。一个例子是 vsprintf 中的“参数太少”。这是一个警告,因此除非您创建自定义错误处理程序,否则它不会停止解释器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多