自定义PHP错误处理程序

时间:2012-04-19 22:12:55

标签: php class

我试图找到更好的PHP错误处理程序,一个在html中更容易阅读,但我在google上看不到任何错误。

我试图制作自己的命令,但是找出命令的任务比我有时间多,我遇到了很多错误。

这是php正在生成的垃圾(文件,类和函数名称已被更改):

Fatal error: Cannot redeclare bbb() (previously declared in /home/user/path/1.php:5) in /home/user/path/1.php on line 26 Call Stack: 0.0309 662280 1. {main}() /home/user/path/1.php:0 0.0610 5610272 2. su::aaa() /home/user/path/1.php:21 0.0610 5610752 3. su::__callStatic() /home/user/path/class.su.php:0 0.0610 5611456 4. call_user_func_array() /home/user/path/class.su.php:27 0.0610 5611912 5. user->aaa() /home/user/path/class.su.php:0 0.0628 5670816 6. user->aaa() /home/user/path/class.user.php:3342 0.0628 5671640 7. user->aaa() /home/user/path/class.user.php:3407 0.0628 5672464 8. user->sss() /home/user/path/class.user.php:3449 0.0628 5679576 9. DA->ccc() /home/user/path/class.user.php:3475 

这一切都是一行,我无法在脑海中解析它,看看究竟发生了什么。我希望这个调用堆栈打印为漂亮的HTML。

谢谢, 利亚

3 个答案:

答案 0 :(得分:1)

使用 set_error_handler() 专为此而设计。定义一个接受以下参数的函数:

handler_function ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )

set_error_handler()使用它而不是默认的PHP处理程序。请务必先阅读整个manual entry

答案 1 :(得分:0)

您可以轻松实现所需的http://il.php.net/manual/en/function.set-error-handler.php,并且可以轻松自定义

守则

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    if (! (error_reporting () & $errno)) {
        // This error code is not included in error_reporting
        return;
    }

    switch ($errno) {
        case E_USER_ERROR :
            echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
            echo "  Fatal error on line $errline in file $errfile";
            echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
            echo "Aborting...<br />\n";
            exit ( 1 );
            break;

        case E_USER_WARNING :
            echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
            break;

        case E_USER_NOTICE :
            echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
            break;

        default :
            echo "Unknown error type: [$errno] $errstr<br />\n";
            break;
    }

    /* Don't execute PHP internal error handler */
    return true;
}

如果这不是您想要的,那么请更好地解释

答案 2 :(得分:0)

我正在寻找的功能是debug_backtrace。通过在错误处理程序中实现它,我能够打印调用堆栈。