Здравствуйте, коллеги! Недавно столкнулся со следующей проблемой:
Я хочу уведомлять пользователей, если что-то пошло не так. Так вот, если что-то пошло не так, то пользователю вместо обычной странички (которую он ожидал увидеть) будет выдано сообщение о том, что что-то пошло не так и надо попробывать позже.
Набросал вот-такой код:
<style>
.error_message{
background-color:blue;
color:white;
border: 2px black solid;
}
</style>
<?
set_error_handler(function($errno, $error_message, $err_file, $errline){
echo "<div class='error_message'>Произошла ошибка уровня $errno. Попробуйте заглянуть позже.</div>";
if (($errno == E_USER_ERROR) || ($errno == E_ERROR)) {
echo "<p>Fatal error. Program ending.</p>";
exit;
}
echo "<hr/>";
});
trigger_error('Trigger function called.', E_USER_NOTICE);
fopen('nofile', 'r');
trigger_error('This computer is beige.', E_USER_WARNING);
include ('nofile');
trigger_error('This computer will self destruct in 15 seconds.', E_USER_ERROR);
?>
Вот конфигурация:
error_reporting = E_ALL
display_errors = Off
display_startup_errors = On
log_errors = On
Я пытаюсь сделать так, что бы пользователь знал о том, что произошла какая-то ошибка, а саму информацию об ошибке я пытаюсь направить в журнал ошибок. Но почему-то ошибки до журнала не доходят. Если убрать set_exception_handler, то тоже не работает*. В чем дело? Я заметил, что до журнала доходять только фатальные ошибки ( и другие серьезные ошибки, напримера ошибки парсинга). Что я делаю не так и как это исправить? Что я не понимаю?
Вот вывод этого скрипта в браузере (без CSS) :
Произошла ошибка уровня 1024. Попробуйте заглянуть позже.
Произошла ошибка уровня 2. Попробуйте заглянуть позже.
Произошла ошибка уровня 512. Попробуйте заглянуть позже.
Произошла ошибка уровня 2. Попробуйте заглянуть позже.
Произошла ошибка уровня 2. Попробуйте заглянуть позже.
Произошла ошибка уровня 256. Попробуйте заглянуть позже.
Fatal error. Program ending.
Заранее выражаю огромную благодарность всем, кто поможет.
UPD:
*Без set_error_handler работает.