如何使用PHP中的严格报告管理错误?
我在PHP中使用一个带有完整错误报告的自定义错误处理程序来跟踪错误。这对于调试非常有用,并将我的所有错误记录在数据库中,以便以后进行调查 无论如何,此方法现在禁用了如何使用PHP中的严格报告管理错误?,php,error-handling,try-catch,error-reporting,Php,Error Handling,Try Catch,Error Reporting,我在PHP中使用一个带有完整错误报告的自定义错误处理程序来跟踪错误。这对于调试非常有用,并将我的所有错误记录在数据库中,以便以后进行调查 无论如何,此方法现在禁用了@的用法,以便在出现错误时忽略错误。我现在有一个问题,我试图在我的系统上重命名一个目录,因为它可能偶尔会抛出一个错误(如果在其中访问文件) 我希望能够在代码中捕获此错误,以防止执行函数的其余部分,但我也不希望此错误出现在错误日志数据库中(考虑到此错误在代码中是“管理的”,因此不需要看到它失败) 有没有简单的解决办法?我尝试使用try/
@
的用法,以便在出现错误时忽略错误。我现在有一个问题,我试图在我的系统上重命名一个目录,因为它可能偶尔会抛出一个错误(如果在其中访问文件)
我希望能够在代码中捕获此错误,以防止执行函数的其余部分,但我也不希望此错误出现在错误日志数据库中(考虑到此错误在代码中是“管理的”,因此不需要看到它失败)
有没有简单的解决办法?我尝试使用try/catch,但它仍然会抛出错误。您可以将所有错误/警告/通知转换为异常
function exceptions_error_handler($severity, $message, $filename, $lineno) {
if (error_reporting() == 0) {
return;
}
if (error_reporting() & $severity) {
throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
}
set_error_handler('exceptions_error_handler');
我认为处理异常比处理php本机错误更好。@zerkms的解决方案可以很好地工作,但我的错误处理程序已经完成,因此为了扩展它以提供功能,我只包括:
if ( error_reporting() == 0 )
return;
在我的处理器开始时。这样,如果在函数上使用了@
,则仍然会抛出错误,但在处理程序开始时会被忽略(因此,不会登录到数据库等),并且我仍然会从函数中获得布尔结果,例如rename()
这也使我能够在需要时对代码使用try/catch解决方案。我可以看到您的try/catch块吗?嗯,谢谢。这是一个进步,但是现在所有的错误都需要使用try/catch,对吗?“我的函数”不再将错误记录到数据库中,因为引发了此异常,因此如果我在脚本中不在任何地方使用try/catch,则不会记录这些错误。@Rhys:这取决于您试图实现的目标。在我的应用程序中,如果错误真的出乎意料,那么它将被捕获在全局try-catch包装器中,在那里它被记录下来,并且在那里我向用户回显某种抱歉页面。若错误是预期的(比如当我们在数据库中得到唯一约束错误时),那个么我将就地处理它,而不记录(因为它不需要记录,因为它是“预期”错误之一)