2009-06-24 2 views
12

Я хочу, чтобы вы приводили причины, почему кто-то не должен использовать максимально возможный уровень отчетности об ошибках в PHP?Почему бы не использовать высокий уровень отчетности об ошибках в PHP?

Пути установить высокий уровень:

PHP < 5.4:

error_reporting(E_ALL | E_STRICT); 

PHP> = 5.4:

error_reporting(E_ALL); 

PHP все версии (в соответствии с рекомендациями для config files) :

error_reporting(2147483647); 

PHP все версии (мой конфиг, -1 будет содержать все ошибки и легко запомнить)

error_reporting(-1); 

Мой опыт:

  • нет никаких оснований для низкого отчетные уровни
  • никогда не использовался error control operator
  • использовать, чтобы преобразовать все ошибки в исключение с помощью set_error_handler и настраиваемой класс исключений для перезаписи файла и строки
+2

«Таким образом, вместо E_ALL рассмотрим использование большего значения для охвата всех бит-полей отныне и в будущем, числовое значение, например 2147483647.»: Если это рекомендуемое значение для использования error_reporting, почему именно они не установлен E_ALL до 2147483647 ??? –

+0

если есть производство. иногда он не хочет, чтобы клиент видел предупреждения о img, не существует или что-то –

+4

@haim: вы должны регистрировать ошибки, а не отображать их в браузере. –

ответ

22

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

  1. Возможно, вы работаете с устаревшим кодом, который генерирует много предупреждений. Если код работает правильно, это не проблема, но «шум» может отвлекать и мешать вам видеть реальные проблемы. В этой ситуации может быть желательно снизить уровень отчетности об ошибках.
  2. В рабочей среде вы можете регистрировать только ошибки. Это имеет два преимущества: это означает, что ваши журналы ошибок содержат только важные проблемы, которые требуют внимания, и это позволит сэкономить дисковое пространство (и уменьшить дисковый ввод/вывод).

Отключить тему: в рабочей среде вы должны запустить «display_errors = Off» и «error_logging = On», чтобы пользователи не могли видеть ошибки PHP (которые могут содержать конфиденциальную информацию, например, свойства подключения к базе данных), и собирать журнал ошибок по мере их возникновения. Таким образом, ваш уровень error_reporting и связанные настройки могут отличаться от того, что вы предпочитаете запускать в процессе разработки.

2

Я думаю, что нет веской причины, кроме, может быть, того, что Джим говорит в своей первой точке, используя устаревший код, который не может или не будет изменен.

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

Если у вас есть причина не исправлять уведомление во время разработки, вы должны задокументировать его и использовать оператор contorl ошибки, чтобы избежать загромождения журналов.

1

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

+0

Я не вижу, как производительность вписывается в это, кроме того, что оператор управления ошибками работает медленно. – stefs

+2

Использование оператора управления ошибками имеет небольшую производительность. Однако основная стоимость исполнения - это действие запуска самого предупреждения (которое затем подавляется). Я не рассматривал это в своем первоначальном ответе, но Уилл на самом деле прав, код, который испускает множество предупреждений (сообщаемых или других), может работать медленнее, чем чистый код, который не выдает никаких предупреждений. См. Http://vega.rd.no/articles/php-performance-error-suppression для тестов. –

0

Ну, из sys admin PoV ... иногда вы ничего не можете сделать с кодом-наследием или новым. Некоторые разработчики не отлаживают должным образом, и менеджер будет смотреть на вас смешно, если вы тратите время на то, что на самом деле не имеет значения (не уверен, что это кого-то расстроит, но если результат будет таким же до и после, то это не имеет большого значения). Я очень рад, что могу отключить уведомления и сосредоточиться на любых реальных проблемах.

Кроме того, это всего лишь выстрел в темноте, но, возможно, есть какой-то способ сделать что-то малое с этим с точки зрения отладки с помощью вызовов error_log().

Смежные вопросы