set_error_handler('myErrorHandler');
register_shutdown_function('fatalErrorShutdownHandler');
function myErrorHandler($code, $message, $file, $line) {
...
}
function fatalErrorShutdownHandler()
{
$last_error = error_get_last();
if ($last_error['type'] === E_ERROR) {
// fatal error
myErrorHandler(E_ERROR, $last_error['message'], $last_error['file'], $last_error['line']);
}
}
Ключевой момент — регистрирование пользовательского обработчика и вызов
его системой при фатальной ошибке, в том числе out of memory errors. error_get_last() используется для определения почему произошла фатальная ошибка
PHP Trick: Catching fatal errors (E_ERROR) with a custom error handler
Следующие типы ошибок не могут быть обработаны через пользовательский обработчик ошибок: E_ERROR,
E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR,
E_COMPILE_WARNING, and most of E_STRICT raised in the file where
set_error_handler() is called.
Возможное решение ловить fatal E_ERROR errors и через пользовательский обработчик и функции register_shutdown_function() and error_get_last():
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий