1

假设我基本上是在继承一个在生产中存在很多错误的实时站点,我基本上是在对整个站点进行重新编码,这可能需要一个月左右的时间。

在某些情况下,此站点依赖于不再存在的外部 xml 文件提要,但代码未正确设置以提供干净整洁的错误消息(有各种类似情况) - 客户要求在至少这些错误消息会消失,即使例如 xml 文件中的内容没有发布,所以我们不会看到 php 错误和页面上的空白区域(因此页面的其余部分看起来“很好”)。

在某一时刻,我听说有人使用 set_error_handler 来消除某些情况并不极端的情况,我想到将其设置为将错误消息存储在文件/日志中或通过电子邮件发送它们(并尽量不要有重复的错误消息) 基本上这样最终用户就不必看到那些丑陋的东西。

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

4

2 回答 2

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

于 2009-08-14T05:06:39.637 回答
3

开发的时候很好用

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

所以你可以立即看到错误:它有助于纠正错误。


在生产服务器上时,您不希望显示错误,因此:

ini_set('display_errors', 'Off');

error_reporting可以保持激活:如果display_errors关闭,则无论如何都不会显示错误-但您仍然可以将它们记录到文件中。


顺便说一句,这些可以在 php.ini 文件中设置,当然:


在生产机器上,您可能想使用log_errorsand error_log,因此将错误记录到文件中(这意味着您将能够知道发生了什么错误 - 有时很有用);当然,不要忘记不时检查该文件;-)。


作为旁注,如果您只有几个不想显示错误的函数/方法,您可以设想使用@ 运算符来掩盖可能触发的错误......

...但我强烈建议不要这样做(除非在非常特殊的情况下):它使调试变得更加困难:那里触发的错误永远不会显示,甚至在您的开发机器上也不会显示!

In my opinion, it is way better to just disable display_errors on the production machine ; it also means no error will be displayed at all, which is better for users!

于 2009-08-14T05:07:26.967 回答