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] используется для определения почему произошла фатальная ошибка

Комментариев нет:

Отправить комментарий