Всем привет!
Пытаюсь разобраться как правильно обрабатывать исключения в веб приложении.. пока остановился на таком варианте. Есть ли тут минусы, может лучше по другому?
Код ниже помещаем в файл типа error-handler.php и инклудим на все необходимые страницы.
// Файл error-handler.php
// Централизованная обработка исключений
ini_set("log_errors", 1);
ini_set("error_log", __DIR__ . "/php-errors.log");
// Уровень ошибок display_errors = 1 используется во время разработки,
// на рабочем сервере установить на 0
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_NOTICE);
// Обрабатываем все исключения, возникающие во время работы приложения
function customExceptionHandler($e)
{
error_log($e);
http_response_code(500);
// Если в режиме отладки, то показываем исключения
if (ini_get('display_errors')) {
echo $e;
} else {
echo "<h1>500 Ошибка сервера.</h1>
Произошла ошибка на стороне сервера.<br>
Пожалуйста, попробуйте еще раз позже.";
}
}
set_exception_handler('customExceptionHandler');
Т.е. в
customExceptionHandler мы ловим все возможные исключения, и предпринимаем соответствующие действия.
Иногда возникают ошибки (Error), а не исключения, тогда предлагают добавить такой код, стоит ли?
set_error_handler(function ($level, $message, $file = '', $line = 0)
{
throw new ErrorException($message, 0, $level, $file, $line);
});
Т.е. ошибку меняем на исключение, и уже обрабатываем опять же в нашем customExceptionHandler.
Буду благодарен за любые комменты )