Я пытаюсь сделать обработчик ошибок в 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();
?>
Ошибки синтаксического анализа должны быть легко распознаваемыми, поскольку я уже использовал предварительно запеченный скрипт, который перехватывает ошибки синтаксического анализа. К сожалению, скрипт довольно глючный.
Ответ таков: 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()
это ошибка, которую вы получаете.
Других решений пока нет …