Я искал по сети, чтобы попытаться найти способ поймать все ошибки, брошенные PHP (5.3)
Я читал документацию, и похоже, что set_error_handler
– это то, что мне нужно, но оно не приводит к ошибкам фатального / синтаксического анализа. Я не уверен, что это возможно …
Вот мой источник: https://github.com/tarnfeld/PHP-Error-Handler Не стесняйтесь fork / commit, если вы знаете лучшие решения для всего этого.
Заранее спасибо!
Используя приведенные ниже ответы, я закончил писать обработчик ошибок , он заботится об E_ERROR | E_PARSE | E_WARNING | E_NOTICE и убьет скрипт, когда он будет фатальным! 🙂
Указание руководства:
Следующие типы ошибок не могут быть обработаны с помощью определенной пользователем функции:
E_ERROR
,E_PARSE
,E_CORE_WARNING
,E_COMPILE_ERROR
,E_COMPILE_WARNING
,E_COMPILE_WARNING
и большая частьE_STRICT
поднятых в файле, гдеset_error_handler()
.
Это означает, что Fatals нельзя поймать и обработать. Что вы можете сделать, так это настроить дополнительный обработчик, который будет запускаться при выходе сценария, например register_shutdown_function
.
В этом обработчике используйте error_get_last
и проверьте, была ли это Fatal Error. Однако это не позволит продолжить выполнение сценария. Сценарий закончится, но вы можете выполнить любую очистку или ведение журнала (как правило, смертельные будут регистрироваться в любом случае error.log) или что-то еще.
В комментариях ниже приведен set_error_handler
register_shutdown_function('shutdownFunction'); function shutDownFunction() { $error = error_get_last(); if ($error['type'] == 1) { //do your stuff } }
Но учтите, что это все равно будет ловить определенные дополнительные ошибки времени выполнения.
Вы можете следить за error_log
. В Ubuntu это находится в /var/log/apache2/error_log
Так называемые «фатальные ошибки» – это, пожалуй, самая неприятная ошибка в php. Лучшее, что мы можем сделать, это убедить «php group» распознать эту ошибку как таковую, проголосовав за этот запрос http://bugs.php.net/bug.php?id=28331 .
Пока это не исправлено, мы обречены использовать грязные хаки, такие как обработчики ошибок выключения или автозагрузки.
Нет, ловить фатальные и синтаксические ошибки невозможно. Исправляйте ошибки, потому что они подняты до того, как скрипт даже скомпилирован. Неустранимая ошибка, потому что они … фатальные (т. Е. Скрипт не может продолжать работать после их столкновения)
Если вы хотите уловить фатальные ошибки (включая ошибки синтаксического анализа), лучшим решением является установка error_logging в файле php.ini, например
display_errors = Off log_errors = On ignore_repeated_errors = Off ignore_repeated_source = Off