Мне нужно обработать фатальные ошибки для производства, чтобы вместо этого показать статический стиль 503 Сервис недоступен для вывода HTML. Это, безусловно, разумный подход к «выявлению фатальных ошибок». Вот что я сделал:
У меня есть пользовательская функция обработки ошибок "error_handler", которая будет отображать мою HTML-страницу "503 служба недоступна" на любом E_ERROR, E_USER_ERROR и т. Д. Теперь она будет вызываться для функции завершения работы с обнаружением моей фатальной ошибки.
function fatal_error_handler() {
if (@is_array($e = @error_get_last())) {
$code = isset($e['type']) ? $e['type'] : 0;
$msg = isset($e['message']) ? $e['message'] : '';
$file = isset($e['file']) ? $e['file'] : '';
$line = isset($e['line']) ? $e['line'] : '';
if ($code>0) error_handler($code,$msg,$file,$line);
}
}
set_error_handler("error_handler");
register_shutdown_function('fatal_error_handler');
в моей пользовательской функции error_handler, если ошибка E_ERROR или E_USER_ERROR и т. Д. Я также вызываю @ob_end_clean (); очистить буфер, удалив таким образом PHP сообщение «фатальная ошибка».
Обратите внимание на строгую проверку isset () и функции @ silencing, поскольку мы не хотим, чтобы наши скрипты error_handler генерировали какие-либо ошибки.
Соглашаясь с keparo, обнаружение фатальных ошибок лишает цели «ФАТАЛЬНОЙ ошибки», поэтому она не предназначена для дальнейшей обработки. Не запускайте никакие функции mail () в этом процессе выключения, так как вы обязательно создадите резервную копию почтового сервера или вашего почтового ящика. Вместо этого запишите эти случаи в файл и запланируйте cron, чтобы найти эти файлы error.log и отправьте их по почте администраторам.