25

隐藏 php 错误以免在浏览器上显示的最佳方法是什么?

是否会使用以下内容:

ini_set("display_errors", 1);

任何最佳实践技巧也将不胜感激!

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

4

7 回答 7

49

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

此示例将错误记录到 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");
于 2008-12-01T21:02:21.457 回答
3

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

于 2008-12-01T22:32:23.880 回答
3

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

<IfModule mod_php5.c>
  php_flag      display_errors  Off
  php_flag      log_errors      On
  php_value     error_log       logs/errors
</IfModule>
于 2008-12-01T22:36:28.957 回答
2

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

if ( isset($_ENV['MY_APP_MODE']) && ($_ENV['MY_APP_MODE'] == 'devel') ) {
    error_reporting(E_ALL);
} else {
    error_reporting(0);
}
于 2008-12-02T19:02:30.403 回答
2

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

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

    ini_set('display_errors', 'Off');
    ini_set('log_errors', 'On');
    ini_set("error_log", "/absolute/path/to/my/error_log");
于 2019-02-10T16:25:00.800 回答
1

不幸的是,PHP 分发文件发送了一条关于处理错误消息的混合消息。默认的 php.ini 文件有一些适合生产服务器的设置,还有一些更适合开发服务器的设置。您应该在 dev (error_reporting = E_ALLdisplay_errors = On)中打开所有错误,并在 prod 中关闭(display_errors = off但指向log_errors某个地方)。但是,请尽力确保没有错误(或已处理)。

于 2008-12-02T05:36:39.560 回答
-1

最好的办法?修正错误!

如果您需要一个快速的临时解决方案,则可以关闭 display_errors,但请确保您将它们记录在某个地方,因为该设置将使严重/解析错误保持沉默。

于 2008-12-01T22:42:15.827 回答