【问题标题】:Best practices for global error handling in PHP?PHP中全局错误处理的最佳实践?
【发布时间】:2010-02-16 21:37:10
【问题描述】:

我在 PHP 5 中使用了一个将错误转换为异常的类,它将错误记录到文件中和/或通过电子邮件将它们发送到指定的帐户。有一个更好的方法吗?关于这一点,我知道可以做得更好。我正在使用 set_error_handler。

set_error_handler("exception_error_handler");

我的代码做了它应该做的事情,它记录并通过电子邮件发送错误,但我是在以最好的方式做这个过程。将它记录到数据库会更好吗 - 假设数据连接将出现在错误中。网站的行业标准是什么?

【问题讨论】:

  • 您需要使用set_error_handler 设置错误处理程序。否则,你的问题是什么?你的代码没有做什么你想让它做的事情?更具体。

标签: php error-handling


【解决方案1】:

您处理错误的代码必须绝对防弹。

有时它会因为你忘记测试的一个非常模糊的原因而启动,但你仍然希望它在它挣扎通过启示录的代码版本时运行。

将其输出写入数据库会给您的代码带来巨大的依赖性 - 缺少数据库很可能是导致报告问题的主要原因。

依赖邮件仍然是一个依赖项,但是在发生中断时最直接的目标应该是让系统重新运行 - 因此发送电子邮件是提醒您需要修复某些问题的一种非常有效的方式。

PHP 的文件处理工具不适合并发访问 - 所以虽然我建议在本地记录任何事件,但不要从代码中写入文件 - 使用 syslog 接口。请务必在将相关详细信息发送到系统日志后发送一封电子邮件。

HTH

C.

【讨论】:

    【解决方案2】:

    我不会将该逻辑转储到错误处理程序中。

    看看Kohana这个方法。

    /**
    * PHP error handler, converts all errors into ErrorExceptions. This handler
    * respects error_reporting settings.
    *
    * @throws ErrorException
    * @return TRUE
    */
    public static function error_handler($code, $error, $file = NULL, $line = NULL)
    {
        if (error_reporting() & $code)
        {
            // This error is not suppressed by current error reporting settings
            // Convert the error into an ErrorException
            throw new ErrorException($error, $code, 0, $file, $line);
        }
    
        // Do not execute the PHP error handler
        return TRUE;
    }
    

    清理并执行方法描述的操作。您现在可以将处理移至异常处理程序或 catch 块内。

    【讨论】:

    • 好吧,我在他有代码示例时回答了这个问题,但现在它消失了,如果我的回答没有任何意义,我深表歉意。
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 2018-09-12
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2012-05-22
    相关资源
    最近更新 更多