Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$haltCodes = array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, 4096);
$error = error_get_last();
if ($error && in_array($error['type'], $haltCodes)) {
self::handleError($error['type'], $error['message'], $error['file'], $error['line']);
}
register_shutdown_function(function () {
$error = error_get_last();
if ($error && ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR)) {
if (strpos($error['message'], 'Allowed memory size') === 0) { // если кончилась память
ini_set('memory_limit', (intval(ini_get('memory_limit'))+64)."M"); // выделяем немножко, что бы доработать корректно
Log::error("PHP Fatal: not enough memory in ".$error['file'].":".$error['line']);
} else {
Log::error("PHP Fatal: ".$error['message']." in ".$error['file'].":".$error['line']);
}
// ... завершаемся корректно ....
}
});
У меня есть мнение, что там в документации+переводе ошибка. Система работает не по схеме стек, а по схеме очередь. Об этом я уведомил переводчика, а тот, наверное, редакторов документации.
$this->$mWorkSuccessТут ошибка, очевидно. Лишний доллар.
set_error_handler(array(&$this, 'ErrorCatcher'));
if (error_reporting() & $error['type']) { /* print error */ })
Обработка критических ошибок в PHP