抑制生产服务器上的php错误的最佳方法

时间:2008-12-01 20:56:16

标签: php error-handling

将php错误隐藏在浏览器上的最佳方法是什么?

是否可以使用以下内容:

ini_set("display_errors", 1);

任何最佳实践提示也将受到赞赏!

我正在记录错误,我只是想确保将display_errors值设置为off(或0)不会阻止记录错误。

7 个答案:

答案 0 :(得分:46)

最好的方法是记录您的错误,而不是显示或忽略它们。

此示例将错误记录到syslog中,而不是在浏览器中显示它们。

ini_set("display_errors", 0);
ini_set("log_errors", 1);

//Define where do you want the log to go, syslog or a file of your liking with
ini_set("error_log", "syslog"); // or ini_set("error_log", "/path/to/syslog/file");

答案 1 :(得分:3)

假设您可以控制php.ini文件,您可以在该文件中全局进行这些更改,而不是在所有php文件中放置ini_set代码(您可能忘记在其中一个文件中放置一个那天,生产可能会很糟糕。)

答案 2 :(得分:2)

在开发计算机上设置环境变量。然后,您可以在代码的开头检查您的环境,以确保您在开发环境中。 然后,您可以使用error_reporting()函数设置PHP的错误报告级别。

if ( isset($_ENV['MY_APP_MODE']) && ($_ENV['MY_APP_MODE'] == 'devel') ) {
    error_reporting(E_ALL);
} else {
    error_reporting(0);
}

答案 3 :(得分:1)

您也可以使用apache .htaccess记录错误,而无需触及您的代码:

<IfModule mod_php5.c>
  php_flag      display_errors  Off
  php_flag      log_errors      On
  php_value     error_log       logs/errors
</IfModule>

答案 4 :(得分:1)

遗憾的是,PHP分发文件发送了有关处理错误消息的混合消息。默认的php.ini文件有一些适用于生产服务器的设置,而其他更适合开发服务器的设置。你应该在dev(error_reporting = E_ALLdisplay_errors = On)中关闭所有错误,然后在prod(display_errors = off但在某处指向log_errors)关闭。但是,尽力确保没有错误(或者处理它们)。

答案 5 :(得分:0)

在PHP 7.1上,接受的答案对我根本不起作用。

这在生产中按预期工作,将错误记录到提供的文件中,而不向用户显示错误:

    ini_set('display_errors', 'Off');
    ini_set('log_errors', 'On');
    ini_set("error_log", "/absolute/path/to/my/error_log");

答案 6 :(得分:-1)

最好的方法?修复错误!

如果你需要一个快速的临时解决方案,那么可以关闭display_errors,但要确保你将它们记录在某处,因为该设置会使严重/解析错误无声。