2012-04-19 4 views
0

Я попытался найти лучшего обработчика ошибок PHP, который будет легче читать в html, но я не вижу в Google.Пользовательский обработчик ошибок PHP

Я попытался сделать свой собственный, но задача выяснить команды была больше, чем у меня было время, и я столкнулся с множеством ошибок.

Вот мусор, который 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

php и обработка ошибок - забавная история, только окончание больше похоже на историю преступления: многие части php все еще не бросают исключений или, по крайней мере, что-то, что можно уловить, но прекращают выполнение. – Hajo

+0

Просто нажмите CTRL + U (нет идеи для яблока), и вы увидите, что форматирование обратной линии на самом деле многострочно. Кроме того, если это для тестовой системы (так как вам нужно видеть ошибки в браузере и не заносить в журнал), рассмотрите xdebug, который даст вам больше ароматизированных обратных трасс и ошибок HTML, даже в том числе. variabels и так далее. http://xdebug.org/ <- go получить гаджет. – hakre

ответ

0

функция, которую я был поиск debug_backtrace. Внедряя это в обработчик ошибок, я смог распечатать стек вызовов.

1

Использование set_error_handler() Он разработан специально для этого. Определить функцию, которая принимает следующие аргументы:

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

И есть set_error_handler() использовать что вместо обработчика PHP по умолчанию. Обязательно прочитайте все manual entry!

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; 
} 

Если это не то, что вы хотите, то лучше объяснить