我无法管理以下内容:我有一个错误处理程序可以捕获所有E_WARNINGS
,但我只想处理一些我想忽略的警告并将它们传递给默认的PHP错误处理程序(除了E_WARNINGS
之外,还会采用除set_error_handler(function($errno, $errstr, $errfile, $errline, $errcontext) {
if($errfile != 'somefile_for_example.php') {
// I don't care about this error throw it somewhere else!
}
echo 'error in this file handles my custom error handler';
return true;
}, E_WARNING);
之外的所有其他错误类型。
这甚至可能吗?看看我的简单错误处理程序:
{{1}}
答案 0 :(得分:3)
PHP文档说:http://php.net/manual/en/function.set-error-handler.php
重要的是要记住标准的PHP错误处理程序是 完全绕过error_types指定的错误类型 除非回调函数返回FALSE。
也许这应该有效:
$old_error_handler = set_error_handler(
function($errno, $errstr, $errfile, $errline, $errcontext) {
if($errfile != 'somefile_for_example.php') {
return false;
}
echo 'error in this file handles my custom error handler';
return true;
}, E_WARNING);
-
[编辑]另一位用户(Philipp)评论说set_error_handler返回旧的处理程序,但仅针对另一个自定义处理程序,而不是默认处理程序。
-
在任何情况下,编程错误处理程序时,必须始终特别注意编程错误,因为它们无法处理(可能首先自己测试函数)。
答案 1 :(得分:0)
如果您真的需要php的错误处理程序,那么这样做并不是一个简单的解决方案。
如果调用set_error_handler
,则会将当前错误处理程序作为返回值,但仅限于已调用set_error_handler。避免这种情况的可能解决方案是恢复错误处理程序(restore_error_handler
)触发您自己的错误(trigger_error
)并再次设置您自己的错误处理程序。需要注意的是,您丢失了有关错误行,文件和上下文的信息。此外,您只能触发用户错误,这意味着您必须将每种错误类型映射到用户错误类型。
我建议,要处理自定义处理程序中的所有错误 - 这些解决方法没有真正的好处。