有没有办法在PHP中以集中方式处理错误报告?我希望通过电子邮件通知我的申请所引发的所有错误。
为整个应用程序实现此目的的最佳方法是什么?
由于
答案 0 :(得分:8)
您可以使用set_error_handler在运行时以任何方式处理错误。
答案 1 :(得分:6)
正如Kalium所提到的,你会想要使用set_error_handler
,但这只能帮助你解决问题。您还想捕获未捕获的异常。为此,请使用set_exception_handler
。
我自己做的是让我的代码陷阱错误,并将这些错误转换为适合我可以在其他地方捕获的异常。对于任何未捕获的内容,我使用默认的异常处理程序来记录和报告它们,并在必要时显示相应的错误。
答案 2 :(得分:4)
有3种类型的错误:
系统错误,例如PHP引发的警告或致命错误。 404错误也属于此类别。
查询或数据库连接格式错误或失败的数据库错误。
创建处理所有三种类型错误的ErrorHandler
类的最佳方法。对于系统错误,您可以使用set_error_handler
或阅读其中一个在线教程,例如this one。
对于数据库,我建议使用一个处理所有查询的集中式数据库类。使用这样的东西:
$result=mysql_query($sql);
if (! $result)
{
$ErrorHandler->dbError(mysql_error(), $sql);
}
对于逻辑错误,例如找不到预期文件或数据库记录的错误,您将调用相同的ErrorHandler类并执行以下操作:
if ($logicalError)
{
$ErrorHandler->appError('Something bad happened',__LINE__, __FILE__);
$ErrorHandler->showAppErrorPage();
}
此处__FILE__
和__LINE__
常量将准确给出发生此错误的位置。在php.net网站上阅读它们。
您的ErrorHandler
课程可以将所有错误记录到日志文件中,通过电子邮件发送给您,甚至可以将短信/短信记录在手机上。它还可以用于将用户重定向到错误页面。