我试图找到更好的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。
谢谢, 利亚
答案 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。通过在错误处理程序中实现它,我能够打印调用堆栈。