Поймать фатальные ошибки PHP

Я пытаюсь сделать обработчик ошибок в PHP, который ловит фатальные ошибки.
Ловить нормальные ошибки работает! К счастью!

Но фатальных ошибок по-прежнему нет.

Может кто-нибудь сказать мне, пожалуйста, в чем проблема с моим сценарием ниже:
Бесконечно благодарен. Если это так, значит, это спасло мой день: — #

function shutdown(){
$isError = false;
if($error = error_get_last()){
switch($error['type']){
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
$isError = true;
break;
}
}
if ($isError){
echo "Script execution halted ({$error['message']})";
}
else {
echo "Script completed";
}
}set_error_handler('errorHandler');
register_shutdown_function('shutdown');
function errorHandler( $errno, $errstr, $errfile, $errline, $errcontext){
echo 'Into '.__FUNCTION__.'() at line '.__LINE__.
"\n\n---ERRNO---\n". print_r( $errno, true).
"\n\n---ERRSTR---\n". print_r( $errstr, true).
"\n\n---ERRFILE---\n". print_r( $errfile, true).
"\n\n---ERRLINE---\n". print_r( $errline, true).
"\n\n---ERRCONTEXT---\n".print_r( $errcontext, true).
"\n\nBacktrace of errorHandler()\n".
print_r( debug_backtrace(), true);
}

function a( ){
//echo "a()'s backtrace\n".print_r( debug_backtrace(), true);
echo 'asdfasdf; // oops
}

function b(){
//echo "b()'s backtrace\n".print_r( debug_backtrace(), true);
a();
}

b();
?>

Ошибки синтаксического анализа должны быть легко распознаваемыми, поскольку я уже использовал предварительно запеченный скрипт, который перехватывает ошибки синтаксического анализа. К сожалению, скрипт довольно глючный.

1

Решение

Ответ таков: PHP не выполнит ни один файл с ошибкой разбора.

Это по-прежнему означает, что вы можете перехватывать ошибки разбора, но только во включенных / обязательных файлах:

function shutdown() {
$isError = false;
if($error = error_get_last()){
switch($error['type']){
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
case E_PARSE:
$isError = true;
break;
}
}
if ($isError){
echo "Script execution halted ({$error['message']})";
}
else {
echo "Script completed";
}
}register_shutdown_function('shutdown');

require 'broken.php'; // File with parse error

Обратите внимание, я добавил E_PARSE постоянный к вашему switch()это ошибка, которую вы получаете.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]