【问题标题】:Stop printing php error messages to browser停止向浏览器打印 php 错误消息
【发布时间】:2012-02-14 05:28:35
【问题描述】:

我正在使用 PHP 5.3、CentOS 6.2、httpd 2.2.15、NetBeans 7.0.1(通过 ftp 远程运行)。

我想停止向浏览器打印错误消息,打印到 httpd 的 error_log 就足够了。

我认为通过 try/catch 可以自行决定如何处理错误,但它仍然会同时打印到 error_log 和浏览器。

function smic_gettext($phrase){

        try{
            $tr_text = $this->language_array[$phrase];

        } catch(Exception $e){
            error_log("Couldn't find any entry in the translation file for ".$phrase.". ".$e);
            return $phrase;

        }

        return $tr_text;
    } 

我应该如何配置才能停止这种行为?

我尝试在 php.ini 中设置 display_errors=Off 和 display_errors=0。没有区别(我确实重新启动了 httpd)。

【问题讨论】:

  • 生产环境应该在php.ini文件中禁用PHP错误/通知,并且只记录到日志文件
  • 旁注:PHP 中的错误不是异常(例如在 Java 中),但有一种方法可以将它们转换为异常并进行相应处理。见php.net/manual/en/class.errorexception.php

标签: php linux netbeans error-handling apache


【解决方案1】:

如果错误仅出现在一行中,则可以通过在该行的开头添加符号 @ 来防止错误显示。

@YOUR_CUSTOM_COMMAND

例子:

@file_get_contents('custom_file.txt');

【讨论】:

    【解决方案2】:

    FWIW,虽然 display_errors = off 是正确的配置文件行,正如其他人所说,在 DreamHost(可能还有其他安装)上,它进入

    $HOME/.php/phprc

    而不是 php.ini(它也可以工作,但 DreamHost —— 可能还有其他人—— 支持 phprc)。

    【讨论】:

      【解决方案3】:

      您需要将 php.ini 设置 display_errors 更改为 off0。您可以在实际的 php.ini 中使用 .htaccess 文件执行此操作,也可以在脚本开头调用它:

      ini_set('display_errors', '0');
      

      【讨论】:

      • 谢谢,帮了大忙。
      【解决方案4】:

      尝试将以下内容添加到脚本的顶部:

      ini_set('display_errors',0);
      

      这应该将错误报告设置为 none 并覆盖服务器 php.ini 设置(有时会忽略您的 error_reporting(0) )

      【讨论】:

      • 将 error_reporting 设置为 0 也会导致不记录任何错误。我不建议在生产环境中这样做。设置ini_set('display_errors',0); 就足够了。
      • Mchl 和 klennepette,感谢您的协助。 Nicsoft,他们是对的,只是 ini_set('display_errors',0);应该做的工作。
      【解决方案5】:

      如果你想隐藏错误和警告,你也可以设置一个error_handler。

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

      【讨论】:

        【解决方案6】:
        display_errors = Off
        

        在 php.ini 中将让您保留系统日志错误,但不向浏览器写入任何内容。

        【讨论】:

        • 我想对所有脚本都这样做,所以配置 php.ini 似乎是最好的方法。我确实尝试了 display_error=Off 和 display_error=0,重新启动 httpd 但没有区别。
        • 你试过“display_error”,但关键字是“display_errors”
        • 很抱歉,这只是我的评论中的错字,我使用了 display_errors。
        • 您是否检查过文件中没有出现其他“display_errors”?
        • 这太尴尬了... display_errors 有重复的条目。猜猜是时候休息了。非常感谢!
        【解决方案7】:

        PHP 错误是否发送到浏览器取决于 php.ini 设置:display_errors。将其设置为Off 以避免它被输出。该文件通常位于/etc/php.ini/etc/php5/php.ini

        【讨论】:

        • @DaveRandom OP 提到他在 CentOS 上,而在 CentOS 上这通常是路径。
        • 我想对所有脚本都这样做,所以配置 php.ini 似乎是最好的方法。我确实尝试了 display_error=Off 和 display_error=0,重新启动 httpd 但没有区别。
        • 应该是 display_errors(复数),而不是错误。如果这只是一个错字并且 display_errors 设置为 Off,请确保您的脚本中没有“推翻” display_errors(例如,使用其他人建议的 ini_set 方法)并且您的 .htaccess 文件中没有类似 php_flag display_errors Off 的内容(如果你有一个)。
        • 我实际上使用了复数,只是在我的评论中我把它变成了单数(不能再更新了)。我没有使用任何 .htaccess 文件。
        【解决方案8】:

        【讨论】:

        • 我想对所有脚本都这样做,所以配置 php.ini 似乎是最好的方法。我确实尝试了 display_errors=Off 和 display_errors=0,重新启动 httpd 但没有区别。
        猜你喜欢
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 1970-01-01
        • 2017-02-19
        • 1970-01-01
        相关资源
        最近更新 更多