将php错误隐藏在浏览器上的最佳方法是什么?
是否可以使用以下内容:
ini_set("display_errors", 1);
任何最佳实践提示也将受到赞赏!
我正在记录错误,我只是想确保将display_errors值设置为off(或0)不会阻止记录错误。
答案 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_ALL
和display_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,但要确保你将它们记录在某处,因为该设置会使严重/解析错误无声。