Як заглушити помилки PHP?


32

Чи є спосіб заглушити всі помилки, попередження та повідомлення PHP в Drupal? Вони корисні на сайті розробки, але вони є великим ризиком для безпеки, і вони роблять погано виглядати на сайті.

Я знаю, що на Drupal 6 сторінка адміністратора / налаштування / повідомлення про помилки може зупинити Drupal від помилок запису на екран, але де я можу це знайти в Drupal 7? Здається, його немає.


3
Зауважте, що помилки грають дуже важливу роль: вони вказують на те, що щось не так. Що дивно, це не вирішує основну проблему. Це також називається "російським методом": Коли сигналізація на атомній станції почне блимати, просто вийміть лампочку. Сигналізація більше не блимає; немає проблем.
Берки

Смішно :). Але я лише пригнічую помилку на виробничому майданчику.
drupal_stuff_alter

Drupal має можливість вирішити, які помилки слід відображати; не відображені помилки все ще записуються в базу даних і відображаються в адмініструванні / звітах / dblog.
kiamlaluno

@kiamlaluno, у виробництві це дещо чудово (все ж подати помилку, що платіж не вдався, завжди краще, ніж залишати клієнта в невизначеності). Але в розробці та тестуванні мій досвід полягає в тому, що помилки, натиснуті на dblog, нехтують. Другальські сайти із сотнями повідомлень та попереджень за годину, що тут зареєстровані, не є винятком. І в шумі губляться справжні винятки та помилки. Найкраще - штовхнути кожне повідомлення сильно в обличчя розробника.
berkes

Правильно, але ОП, здається, зацікавлено приховати ці помилки на виробничому майданчику. (Дивіться, "Вони корисні на сайті розробки, але вони є великим ризиком для безпеки, і змушують сайт виглядати погано в прямому ефірі")
kiamlaluno

Відповіді:


29

Шлях змінюється, як і в Drupal 7 на тій самій сторінці, яку ви раніше бачили в адміністраторі / налаштуваннях / звітування про помилки, зараз в адміністраторі / конфігурації / розробці / реєстрації.

скріншот


1
Чомусь я не в змозі цього зробити. Після натискання кнопки збереження мій вибір скидається. Чи є спосіб змінити це вручну в базі даних чи щось подібне ??
Niranjan N Raju

17

Як було запропоновано, в Administration » Configuration » Development(at /admin/config/development/logging) ви можете знайти налаштування для відключення відображення повідомлень про помилки, але це не вимкне помилку / повідомлення повністю.

Це тому, що Drupal 7 застосовує E_ALL, тому вони все ще записуються в syslog, і ви можете їх бачити в останніх журналах, що впливають на роботу вашого веб-сайту.

Щоб повністю відключити сповіщення, вам доведеться додати наступний рядок у свій файл 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 ви обмежені 3 масками помилок - всі, жодні або помилки та попередження - які встановлені на сторінці адміністратора, вказаному на kiamlaluno.


3

Налаштування завжди в адміністраторі / конфігурації / розробці / реєстрації :)


Дуже дякую! Я все ще хочу, щоб зелені сповіщення були живими. Сподіваюся, вони не зникнуть.
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

На сторінці проекту:

Так можна

  • мати роль конструктора сайтів (або навіть спеціальну роль налагодження), бачити помилки та повідомлення
  • інші не бачать помилок та повідомлень.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.