Как подсказывает этот ответ , вы можете использовать register_shutdown_function()
для регистрации обратного вызова, который проверит error_get_last()
.
Вам все равно придется управлять выводом, сгенерированным изнарушающий код, будь то оператор @
( shut up ) или ini_set('display_errors', false)
ini_set('display_errors', false);
error_reporting(-1);
set_error_handler(function($code, $string, $file, $line){
throw new ErrorException($string, null, $code, $file, $line);
});
register_shutdown_function(function(){
$error = error_get_last();
if(null !== $error)
{
echo 'Caught at shutdown';
}
});
try
{
while(true)
{
$data .= str_repeat('#', PHP_INT_MAX);
}
}
catch(\Exception $exception)
{
echo 'Caught in try/catch';
}
При запуске это выдает Caught at shutdown
.К сожалению, объект исключения ErrorException
не генерируется, потому что фатальная ошибка вызывает завершение сценария, которое впоследствии фиксируется только в функции выключения.
Вы можете проверить массив $error
в функции выключения для получения подробной информации овызвать и ответить соответственно.Одним из предложений может быть повторная отправка запроса на ваше веб-приложение ( по другому адресу или с другими параметрами курса ) и возвращение захваченного ответа.
Я рекомендую сохранять error_reporting()
высоким( значение -1
), однако, и использование (, как другие предложили ) обработки ошибок для всего остального с set_error_handler()
и ErrorException
.