处理@抑制的错误的正确方法?

Proper way to handle errors suppressed by @?

manual 中所述,如果错误来自 @ 抑制,则调用 error_reporting() 将 return 0。但由于我的生产服务器始终设置为 error_reporting(0)(在脚本之上),调用 error_reporting() 将始终 return 到 0

我如何真正捕获或区分合法错误与 @ 抑制的错误?

现在我的错误处理程序是这样的:

if (error_reporting() == (E_ALL OR -1))
    echo 'display specific error';
elseif (error_reporting() == 0)
    echo 'display general error';

注:这与我之前的有关。

Mu. 即使在生产环境中,也不应将 error_reporting 设置为 0

在开发中,您需要将错误报告级别设置为最高级别,以便收到有关任何和所有错误或通知或弃用消息或可能在未来造成问题的可能问题的通知。

在生产中,您需要将错误报告级别设置为仅包括错误和警告,但不包括弃用通知之类的内容。这是为了让您的错误日志不包含多余的信息,并能够有效地追踪生产错误。

因为您应该始终记录错误

您在生产中不应该做的是在屏幕上显示错误。这就是 ini_set('display_errors', true|false) 所控制的。您仍然希望在生产环境中错误报告,只是将其写入日志文件。