Страница пользовательских ошибок PHP

Итак. Все говорят, что «Включение ошибок, которые будут отображаться» на активном сайте, плохо (из-за некоторых проблем с безопасностью).

Теперь мы должны рассмотреть два случая:

  1. Сайт находится в режиме отладки
  2. Сайт не находится в режиме отладки

Теперь, для случая № 1:

Мы хотим видеть ошибки. Как? Что ж:

ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); 

Ничего проще. Также мы можем настроить обработчик ошибок для всех ошибок, кроме Parse и Fatal.

Вместо этого, если дело № 2:

Мы хотели бы иметь возможность деактивировать сообщения:

 ini_set('error_reporting', 0); ini_set('display_errors', 0); 

И все в порядке. Но как насчет того, чтобы показывать пользователям дружеское сообщение, такое как «Hei man, что-то действительно f ** ked up. Я не уверяю вас, что мы работаем над этим, потому что мы очень ленивы». Вы должны включить ошибки снова и просто использовать функцию set_error_handler() и надеяться, что не произойдет никаких синтаксических ошибок или фатальных ошибок. Но мой первый вопрос:

Вопрос 1 : Возможно ли избежать ошибок при составлении отчетов об ошибках и создать пользовательскую автономную страницу, которая загружается, когда что-то пойдет не так? Я имею в виду, возможно ли иметь ini_set('error_reporting', 0); и ini_set('display_errors', 0); и все еще можете сказать PHP, чтобы загрузить пользовательскую страницу ошибок?

А теперь другое:

Вопрос 2 : Я разработал класс, который с мощью set_error_handler() регистрировал ошибки в базе данных. Таким образом, я могу отслеживать попытки взлома и другие интересные вещи. (И да, я всегда уверен, что БД доступна, поскольку мое приложение отключается, если мы не можем подключиться к БД). Стоит ли что-то?

Related of "Страница пользовательских ошибок PHP"

Некоторое время назад я создал небольшую систему, которая перенаправляет вас на страницу с ошибкой при возникновении фатальной ошибки / исключении uncaught. Возможно, с допущением, что каждый запрос обрабатывается одним файлом и заканчивается в этом файле, поэтому, достигнув конца этого файла, я уверен, что все прошло хорошо. С этим условием я настроил функцию для перенаправления на странице ошибки и зарегистрировал ее как функцию выключения – поэтому она будет вызываться в конце всех запросов. Теперь в этой функции я проверяю условия для чистого выключения, и если они выполняются, я ничего не делаю, и вывод очищается в браузере, иначе буфер очищается и отправляется только перенаправление заголовка на страницу ошибки.

Упрощенная версия этого кода:

 <?php function redirect_on_error(){ if(!defined('EVERYTHING_WENT_OK')){ ob_end_clean(); header('Location: error.html'); } } register_shutdown_function('redirect_on_error'); ob_start(); include 'some/working/code.php'; echo "Now I'm going to call undefined function or throw something bad"; undefined_function(); throw new Exception('In case undefined function is defined.'); define('EVERYTHING_WENT_OK', TRUE); exit; 

Вопрос 1: Возможно ли избежать ошибок при составлении отчетов об ошибках и создать пользовательскую автономную страницу, которая загружается, когда что-то пойдет не так?

К сожалению, я так не думаю, по крайней мере, для фатальных ошибок. Тем не менее, последние версии PHP всегда отправляют ответ 500, когда это происходит, поэтому, в зависимости от веб-сервера, вы можете переписать ответ, если это произойдет. Если ваш реальный сервер, на котором запущен PHP, находится за обратным прокси, это становится тривиальным с Apache.

Вопрос 2: Я разработал класс, который с мощью ошибок set_error_handler () регистрировал ошибки в базе данных.

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