Управление ошибками PHP - PullRequest
       30

Управление ошибками PHP

1 голос
/ 14 декабря 2010

Я искал по всей сети, чтобы попытаться найти способ отловить все ошибки, выдаваемые PHP (5.3)

Я прочитал документацию, и похоже, что set_error_handler - это то, что мне нужно, но он не получает фатальных ошибок / ошибок разбора. Я не уверен, возможно ли это ...

Вот мой источник: https://github.com/tarnfeld/PHP-Error-Handler Не стесняйтесь раскошелиться / зафиксировать, если вы знаете лучшие решения для всего этого.

Спасибо заранее!

Обновлено!

Используя ответы ниже, я закончил писать обработчик ошибок , он заботится о E_ERROR | E_PARSE | E_WARNING | E_NOTICE и уничтожит скрипт, когда он будет фатальным! : -)

Ответы [ 5 ]

4 голосов
/ 14 декабря 2010

Цитирование руководства:

Следующие типы ошибок не могут быть обработаны пользовательской функцией: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT, возникающих в файле где set_error_handler() называется.

Это означает, что Фаталы не могут быть пойманы и обработаны. Что вы можете сделать - это настроить дополнительный обработчик, который будет запускаться при выходе из скрипта, например, register_shutdown_function.

В этом обработчике используйте error_get_last и проверьте, не является ли это фатальной ошибкой. Это не позволит вам продолжить выполнение скрипта. Сценарий завершится, но вы можете выполнить любую очистку или запись в журнал (обычно фатальные ошибки будут записаны в любом случае в error.log) или что-то еще.

В комментариях ниже есть предоставленный пользователем пример set_error_handler

register_shutdown_function('shutdownFunction');
function shutDownFunction() {
    $error = error_get_last();
    if ($error['type'] == 1) {
        //do your stuff    
    }
}

Но учтите, что при этом будут обнаружены только некоторые дополнительные ошибки времени выполнения.

2 голосов
/ 14 декабря 2010

Так называемые «фатальные ошибки», пожалуй, самая досадная ошибка в php.Лучшее, что мы можем с этим поделать, - это убедить «php group» признать эту ошибку как таковую, проголосовав за этот запрос http://bugs.php.net/bug.php?id=28331.

Пока это не исправлено, мы обречены использовать грязныйхаки, такие как обработчики ошибок завершения работы или автозагрузки.

2 голосов
/ 14 декабря 2010

Вы можете следить за error_log. В Ubuntu это находится в /var/log/apache2/error_log

0 голосов
/ 14 декабря 2010

Если вы хотите перехватывать фатальные ошибки (включая ошибки синтаксического анализа), лучшее решение - настроить error_logging в файле php.ini, например,

display_errors = Off
log_errors = On
ignore_repeated_errors = Off
ignore_repeated_source = Off
0 голосов
/ 14 декабря 2010

Нет, выявление фатальных ошибок и ошибок синтаксического анализа невозможно.Анализируйте ошибки, потому что они возникают еще до того, как скрипт скомпилирован.Неустранимые ошибки, потому что они ... фатальные (т. Е. Сценарий не может продолжить работу после их обнаружения)

...