0

我试图找到更好的 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。

谢谢,以利亚

4

3 回答 3

1

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

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

并且必须set_error_handler()使用它而不是默认的 PHP 处理程序。请务必先阅读整个手册条目

于 2012-04-19T22:16:15.000 回答
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;
}

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

于 2012-04-19T22:23:58.403 回答
0

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

于 2012-04-20T13:25:35.623 回答