隐藏 php 错误以免在浏览器上显示的最佳方法是什么?
是否会使用以下内容:
ini_set("display_errors", 1);
任何最佳实践技巧也将不胜感激!
我正在记录错误,我只是想确保将 display_errors 值设置为 off(或 0)不会阻止记录错误。
隐藏 php 错误以免在浏览器上显示的最佳方法是什么?
是否会使用以下内容:
ini_set("display_errors", 1);
任何最佳实践技巧也将不胜感激!
我正在记录错误,我只是想确保将 display_errors 值设置为 off(或 0)不会阻止记录错误。
最好的方法是记录您的错误,而不是显示或忽略它们。
此示例将错误记录到 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");
假设您可以控制 php.ini 文件,您可以在该文件中全局进行这些更改,而不是将 ini_set 代码放在所有 php 文件中(有一天您可能会忘记放入其中一个文件,这可能在生产中不好)。
您还可以使用 apache .htaccess 来记录错误,而无需接触您的代码:
<IfModule mod_php5.c>
php_flag display_errors Off
php_flag log_errors On
php_value error_log logs/errors
</IfModule>
在您的开发机器上设置环境变量。然后您可以在代码开头检查您的环境,以确保您在开发环境中。然后您可以使用 error_reporting() 函数设置 PHP 的错误报告级别。
if ( isset($_ENV['MY_APP_MODE']) && ($_ENV['MY_APP_MODE'] == 'devel') ) {
error_reporting(E_ALL);
} else {
error_reporting(0);
}
在 PHP 7.1 上,接受的答案对我来说根本不起作用。
这在生产中按预期工作,将错误记录到提供的文件中并且不向用户显示它们:
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set("error_log", "/absolute/path/to/my/error_log");
不幸的是,PHP 分发文件发送了一条关于处理错误消息的混合消息。默认的 php.ini 文件有一些适合生产服务器的设置,还有一些更适合开发服务器的设置。您应该在 dev (error_reporting = E_ALL
和display_errors = On
)中打开所有错误,并在 prod 中关闭(display_errors = off
但指向log_errors
某个地方)。但是,请尽力确保没有错误(或已处理)。
最好的办法?修正错误!
如果您需要一个快速的临时解决方案,则可以关闭 display_errors,但请确保您将它们记录在某个地方,因为该设置将使严重/解析错误保持沉默。