PHP Trick: Catching fatal errors (E_ERROR) with a custom error handler
Следующие типы ошибок не могут быть обработаны через пользовательский обработчик ошибок: [b]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.[/b]
Возможное решение ловить fatal E_ERROR errors и через пользовательский обработчик и функции [b]register_shutdown_function() and error_get_last()[/b]:
[code]
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']);
}
}
[/code]
Ключевой момент - регистрирование пользовательского обработчика и вызов его системой при фатальной ошибке, в том числе out of memory errors. [b]error_get_last()[/b] используется для определения почему произошла фатальная ошибка
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий