将php错误传递给我的自定义错误处理程序中的默认php错误处理程

时间:2014-06-19 09:26:44

标签: php error-handling

我无法管理以下内容:我有一个错误处理程序可以捕获所有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}}

2 个答案:

答案 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)并再次设置您自己的错误处理程序。需要注意的是,您丢失了有关错误行,文件和上下文的信息。此外,您只能触发用户错误,这意味着您必须将每种错误类型映射到用户错误类型。

我建议,要处理自定义处理程序中的所有错误 - 这些解决方法没有真正的好处。