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


32

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

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


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());

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.