问题描述
|
我使用自定义错误处理程序,并在PHP中使用完整的错误报告来跟踪错误。这非常适合调试,并将我的所有错误记录在数据库中以供以后调查。
无论如何,此方法现在禁止使用“ 0”来忽略发生错误的错误。现在,我遇到了尝试在系统上重命名目录的问题,因为它有时可能会引发错误(如果正在其中访问文件)。
我希望能够在我的代码中捕获此错误,以防止执行该函数的其余部分,但我也不希望该错误出现在我的错误日志记录数据库中(考虑到该错误是“托管”代码,则无需查看失败)。
有一个简单的解决方案吗?我尝试使用try / catch,但它仍然会引发错误。
解决方法
您可以将所有错误/警告/通知转换为异常
function exceptions_error_handler($severity,$message,$filename,$lineno) {
if (error_reporting() == 0) {
return;
}
if (error_reporting() & $severity) {
throw new ErrorException($message,$severity,$lineno);
}
}
set_error_handler(\'exceptions_error_handler\');
我认为处理异常要比php本机错误更好。,@zerkms的解决方案可以正常工作,但是我的错误处理程序已经完成,因此为了扩展此功能以提供功能,我仅提供了以下内容:
if ( error_reporting() == 0 )
return;
在我的处理程序开始时。这样,如果在函数上使用“ 0”,该错误仍会引发,但在处理程序启动时会被忽略(因此,未登录到数据库等),并且我仍将从函数中获得布尔结果,例如如rename()
。
如果需要的话,这仍然使我能够对代码使用try / catch解决方案。