4

有没有办法在 PHP 中集中处理错误报告?我希望通过电子邮件收到我的应用程序引发的所有错误的通知。

为整个应用程序实现这一目标的最佳方法是什么?

谢谢

4

3 回答 3

8

您可以使用set_error_handler以任何您喜欢的方式在运行时处理错误。

于 2009-04-04T15:20:13.100 回答
6

正如 Kalium 所提到的,您会想要使用set_error_handler,但这只会让您获得一部分。您还想捕获未捕获的异常。为此,使用set_exception_handler.

我自己做的是让我的代码捕获错误,并将这些错误转换为我可以在其他地方捕获的适当异常。对于任何未捕获的内容,我使用默认异常处理程序来记录和报告它们,并在必要时显示适当的错误。

于 2009-04-04T15:32:54.163 回答
4

有 3 种类型的错误:

  1. 系统错误,例如 PHP 引发的警告或致命错误。404 错误也属于这一类。

  2. 由格式错误或失败的查询或数据库连接引起的数据库错误。

  3. 逻辑错误,例如与服务器或数据库无关的应用程序内部工作出现问题。例如,如果您希望某个文件位于给定文件夹中,但事实并非如此。

创建ErrorHandler处理所有三种类型错误的类的最佳方法。对于系统错误,您可以使用set_error_handler或阅读其中一个在线教程,例如这个

对于数据库,我建议使用处理所有查询的集中式数据库类。使用这样的东西:

$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班级可以将所有错误记录到日志文件中,向您发送电子邮件,甚至在您的手机上发送短信/短信。它还可以用于将用户重定向到错误页面。

于 2009-04-04T15:39:02.307 回答