假设我基本上继承了生产中存在大量错误的 live 网站,我基本上正在对此整个网站进行重新编码一个月左右。
在某些情况下,此站点依赖于不再存在的外部xml文件源,但代码未正确设置以提供良好的干净错误消息(存在各种类似情况) - 客户端是请求至少这些错误消息消失,即使例如xml文件中的内容未发布,因此我们不会在页面上看到php错误和空白区域(因此页面的其余部分看起来很“精细” “)。
有一次,我听说有人使用set_error_handler来取消某些不是 extreme 的情况,我想把它设置为在文件/日志或电子邮件中存储错误消息他们(并试图没有重复的错误消息)基本上所以最终用户不必看到那些丑陋的东西。
我正在寻找任何实际完成此操作的人的提示,所以提前感谢。
答案 0 :(得分: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_reporting
设置为E_ALL ^ E_NOTICE
,以隐藏错误。这是不好的做法,因为它隐藏了有关可能的编程错误的消息。如果遗留代码中有太多通知无法解决所有问题,则仅使用E_ALL ^ E_NOTICE
。
答案 1 :(得分:3)
在开发中,最好使用
error_reporting(E_ALL);
ini_set('display_errors', 'On');
所以你可以立即看到错误:它有助于纠正错误。
在生产服务器上,您不希望显示错误,因此:
ini_set('display_errors', 'Off');
error_reporting
可以保持激活状态:如果display_errors
处于关闭状态,则无论如何都不会显示错误 - 但您仍然可以将它们记录到文件中。
顺便说一句,那些可以在php.ini文件中设置,当然:
在生产计算机上,您可能希望使用log_errors
和error_log
,因此错误会记录到文件(这意味着您将能够知道发生了什么错误 - 可能有用,有时);当然,不要忘记不时检查该文件; - )。
作为旁注,如果你只是有几个函数/方法,你不想显示错误,你可以设想使用@ operator来掩盖那些可能触发的错误......
...但我强烈建议反对它(除非在非常具体的情况下):它使调试批次更难:触发的错误永远不会显示,甚至在你的开发机器上都没有!
在我看来,在生产机器上禁用display_errors
会更好;它也意味着根本不会显示任何错误,这对用户来说更好!