2009-08-14 60 views
1

比方说,我基本上继承了现场网站,有很多的生产错误的,我基本上做这整个网站可能采取的重新编码一个月左右。抑制误差超出设定的error_reporting(可能的display_errors?)

有些情况下,这个站点依赖外部XML文件提要,这些提要不再存在,但代码没有正确设置提供一个很好的干净的错误消息(有各种类似的情况) - 客户端正在请求至少这些错误信息消失,即使例如xml文件的内容没有发布,所以我们不会看到PHP错误和页面上的空白区域(所以页面的其余部分可以看起来像“罚款“)。

在一个点上我一直在使用的set_error_han dler以抵消某些情况下,它不是极端听到有人和我将它设置为存储错误信息在文件/记录或电子邮件他们的想法(和尝试没有重复的错误信息)基本上,最终用户不必看到那些丑陋的东西。

我正在寻找来自任何实际做过此事的人的提示,所以在此先感谢。

回答

3

当在发展,这是很好的使用

error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 

因此,你可以立刻看到错误:它有助于纠正他们。


当生产服务器上,你不希望错误显示,所以:

ini_set('display_errors', 'Off'); 

error_reporting可以保持激活状态:如果display_errors是关闭,错误将不会在显示效果 - 但你仍然可以让他们登录到一个文件。


顺便说一句,那些可以在PHP中设置。ini文件,当然,:


在生产机器,你可能想使用log_errorserror_log,所以错误将被记录到文件中(这意味着您将能够知道发生了什么错误 - 有时会有用);当然,不要忘记不时检查该文件;-)。


一点题外话,如果你只是有几个功能/你不想方法来显示错误,你可以设想使用@ operator只是掩盖那些可能会引发错误...

。 ..但我强烈建议不要这样做(除非在特定情况下):它会使调试变得更加困难:所触发的错误永远不会显示,即使在您的开发计算机上也是如此!

在我看来,只是在生产机器上禁用display_errors会更好;这也意味着不会显示任何错误,这对用户来说更好!

4

在生产服务器,你应该有以下INI设置:

ini_set('error_reporting', E_ALL | E_STRICT); 
ini_set('log_errors', true); 
ini_set('error_log', '/tmp/php_errors.log'); // or whatever file is appropriate 
ini_set('display_errors', false); 

通过关闭display_errors,用户将不会看到其他错误消息,但将能够看到错误消息查看日志文件。

重新编码完成后,应该不会有更多错误进入日志文件(因为您已经修复了所有错误)。

编辑:一些开发商设置error_reportingE_ALL^E_NOTICE为隐藏错误的方式。这是不好的做法,因为它隐藏了有关可能的编程错误的消息。你应该只有使用E_ALL^E_NOTICE当有这么多来自遗传代码的声明,你无法修复它们全部。