PHP - должен ли использоваться set_error_handler? - PullRequest
2 голосов
/ 16 июня 2011

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

Если это правильно, есть ли смысл настраивать собственный обработчик ошибок? Я всегда сохраняю error_reporting (-1), поэтому в любом случае я должен получить все ошибки в журнале ошибок, верно?

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

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

В процессе работы вы, вероятно, захотите сообщить пользователю что-то , когда ваш сайт рушится, а set_error_handler предоставляет способ визуализации симпатичных сообщений об ошибках, не давая пользователю видеть уродливые вещи.как код и номера строк.Он перехватывает любые ошибки времени выполнения, которые отлавливает обычный обработчик ошибок PHP.

Нет причин избегать использования set_error_handler, и, безусловно, предпочтительнее просто отображать nothing при возникновении ошибки.

3 голосов
/ 16 июня 2011

Если это правильно, есть ли какая-либо цель установки собственного обработчика ошибок?Я всегда сохраняю error_reporting (-1), поэтому в любом случае я должен получать все ошибки в журнале ошибок, верно?

error_reporting указывает, какие ошибки следует сообщать (например, предупреждение, уведомления и т. Д.).Это не имеет ничего общего с тем, что они отображаются в журналах;если вы установите error_reporting равным 0, он не будет зарегистрирован.Если вы хотите, чтобы это было зарегистрировано, но не отображено клиенту, используйте display_errors = Off.

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

Я бы хотел увидеть сообщение о том, что «что-то пошло не так», а не «белый экран смерти».Это может быть легко сделать с помощью специального обработчика ошибок.Так что да, у него есть цель.

3 голосов
/ 16 июня 2011

Установка пользовательского обработчика ошибок предназначена для установки универсального обработчика, который заботится об ошибках, которые не обрабатываются в других местах. Он может перехватывать все ошибки, кроме тех, в которых ваш скрипт вообще не запускается (например, фатальные синтаксические ошибки).

Я также должен указать, что если вы вернете false из своей функции обработки ошибок, то включится встроенный обработчик ошибок PHP.

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

...