Как заставить замолчать ошибки PHP?

32

Есть ли способ заставить замолчать все ошибки PHP, предупреждения и уведомления в Drupal? Они полезны на сайте devel, но представляют серьезную угрозу безопасности и делают сайт в живую плохим.

Я знаю, что на Drupal 6 страница в admin / settings / error-report может остановить Drupal от записи ошибок на экран, но где я могу найти это в Drupal 7? Кажется, это отсутствует.

drupal_stuff_alter
источник
3
Обратите внимание, что ошибки играют очень важную роль: они указывают, что что-то не так. Удивление этого не решает основную проблему. Это также называется «русским методом»: когда сигнальная лампа на атомной электростанции начинает мигать, просто удалите лампочку. Сигнальная лампа больше не мигает; Нет проблем.
беркес
Веселая :). Но я только подавляю ошибку на производственной площадке.
drupal_stuff_alter
Drupal имеет возможность решить, какие ошибки должны отображаться; не отображаемые ошибки по-прежнему записываются в базу данных и отображаются в admin / reports / dblog.
kiamlaluno
@kiamlaluno, в производстве это довольно хорошо (но, тем не менее, выдает ошибку, что платеж не прошел, всегда лучше, чем неопределенность с вашим клиентом). Но при разработке и тестировании мой опыт показывает, что ошибки, помещаемые в dblog, игнорируются. Drupalsites с сотнями уведомлений и предупреждений в час, зарегистрированных здесь, не является исключением. И реальные исключения и ошибки теряются в шуме. Лучше всего толкнуть каждое уведомление в лицо разработчику.
Беркес
Правильно, но ОП, похоже, заинтересован, чтобы скрыть эти ошибки на производственном сайте. (См. «Они полезны на сайте devel, но они представляют
серьезную

Ответы:

29

Путь меняется, как в Drupal 7 та же страница, которую вы раньше видели в admin / settings / error-reporting, теперь находится в admin / config / development / logging.

Скриншот

киамалуно
источник
1
По какой-то причине я не могу этого сделать. При нажатии сохранить мой выбор сбрасывается. Есть ли способ, которым я могу изменить это вручную в базе данных или что-то вроде этого?
Ниранджан Н Раджу
17

Как и предполагалось, в Administration » Configuration » Development/admin/config/development/logging) вы можете найти параметр, чтобы отключить отображение сообщений об ошибках, но он не будет полностью отключать сообщения об ошибках / уведомления.

Это потому, что Drupal 7 применяет E_ALL, поэтому они по-прежнему записываются в системный журнал, и вы можете увидеть их в последних журналах, влияющих на производительность вашего сайта.

Чтобы полностью отключить уведомления, вам нужно добавить следующую строку в ваш файл settings.phpили php.iniфайл:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

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

Чтобы отключить все ошибки PHP, что не рекомендуется, попробуйте добавить в свой файл настроек:

error_reporting(0); // Disable all errors.

Видеть: error_reporting()


Ответственный код ядра Drupal 7 для E_ALLведения журнала (файл:) includes/bootstrap.inc:

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

Смотрите также:

kenorb
источник
4

Никто не упомянул, что людям может быть полезно знать, что Drupal 7 игнорирует все уровни сообщений об ошибках локальной системы. Таким образом, вы не можете использовать .htaccess или даже php.ini для установки уровней отчетов об ошибках php в Drupal.

Для D8 предлагается патч для этого, но в настоящее время в D7 вы ограничены тремя масками ошибок - все, ни одного, или ошибками и предупреждениями - которые установлены на странице администратора, указанной kiamlaluno.

лес
источник
3

Настройки всегда находятся в admin / config / development / logging :)

Ремон
источник
Большое спасибо! Я все еще хочу, чтобы зеленые уведомления были живы. Надеюсь, они не исчезнут.
drupal_stuff_alter
2

Не уверен, почему метод Drush так недокументирован, но у меня есть в моем сценарии сборки:

drush vset error_level 0

... который сохраняет сообщения об ошибках в журнале, но не показывает их на экране.

Мэтт Флетчер
источник
1

Возможно, вам придется добавить цитаты к решению kenorb, опубликованному выше:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');
Грег Лунд-Шо
источник
Это неправильно - это константы, они не должны быть в кавычках. error_reporting - это целочисленное значение, которое состоит из целочисленных констант ORed вместе. Это не строковая настройка, состоящая из имен констант, как у вас здесь.
datashaman
0

Для этого есть модуль:

https://www.drupal.org/project/errorlevelpermission

Со страницы проекта:

Так что вы можете

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