WP_DEBUG не встановлений, але я все одно отримую попередження


14

Якщо WP_DEBUG не встановлений, як я розумію, ви ніколи не бачите попереджень. Але на деяких сайтах на деяких серверах я все ще бачу декілька. Не всі попередження, які відображалися б, якщо було встановлено WP_DEBUG, але декілька вибраних.

Я намагався змінити рівень помилок у php.ini, але це, мабуть, не впливає на те, з’являються чи ні попередження, але вони з’являються в різних кількостях на різних серверах (тобто відсутні попередження про розробку, одне попередження про інсценізацію та ще кілька попереджень про виробництво).


Це безумовно попередження чи фатальні помилки?
TheDeadMedic

У мене виникла точно така ж проблема - це ПОПЕРЕДЖЕННЯ від GravityForms, у моєму випадку результат попередження був - Попередження: перемикач націлювання "продовжувати" еквівалентно "перерві". Ви мали на увазі використовувати "продовжити 2"? в /plugins/gravityforms/common.php - Відповідь Logic Digger нижче працювала копією / вставкою для мене, щоб виправити цю першу спробу, дякую.
OG Шон

Відповіді:


8

WP_DEBUG не впливає на вихід помилок PHP. На додаток до параметра помилок звітування про помилки, у файлі php.ini встановіть display_errors = 0. Це ввімкнено за замовчуванням для розвитку. Але ви захочете це вимкнути на виробничих серверах.


Перефразовуючи wp-include / load.php: if (WP_DEBUG) error_reporting (E_ALL). Але здається, що декілька плагінів сунулися з помилками_репортажів та показовими_помилками, коли їх, мабуть, не повинно бути.
tomdxw

1
Ах - ви праві, параметр display_errors було встановлено на Увімкнено у моєму php.ini. Я просто припустив, що WP_DEBUG піклувався про всі помилки. Дякую.
tomdxw

22

Замініть

define('WP_DEBUG', false);

з цим:

ini_set('log_errors','On');

ini_set('display_errors','Off');

ini_set('error_reporting', E_ALL );

define('WP_DEBUG', false);

define('WP_DEBUG_LOG', true);

define('WP_DEBUG_DISPLAY', false);

4
Будь ласка, додайте пояснення до своєї відповіді.
fuxia

Можливо, помилки на екрані вимкнені, але ви можете побачити їх на своєму сервері в журналі помилок
user2060451

4

Можливо також, що для цього рядка вже встановлено значення false. У цьому випадку ви побачите такий код:

define('WP_DEBUG', false);

В будь-якому випадку вам потрібно замінити цей рядок наступним кодом:

ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);

Не забудьте зберегти зміни та завантажити файл wp-config.php назад на сервер.


1
Дякую, це працювало, щоб приховати для мене попередження на передній частині. У WP_DEBUG вже було встановлено значення false.
OG Шон

1

Спробуйте вимкнути / придушити всі попередження / повідомлення про помилки у вашому wp-config.php(вгорі). У всякому разі: Помилки - це нічого поганого. Вони дають вам можливість виправити свій код.


Я думаю, що саме причиною цього стали плагіни інших людей, що врізалися з error_reporting.
tomdxw

1

Для середовищ WordPress зазвичай немає причин використовувати, ini_setоскільки саме цього вже досягаються визначені константи, надані WordPress Core. Те, як працює PHP, полягає в тому, що певні налаштування можуть бути замінені у вашій CMS (WordPress), в окремих сценаріях і навіть на основі кожного користувача або каталогу (що дуже шкодить веб-хостам і агенціям).

Щоб відключити відображення помилок на сторінці в WordPress, єдине вам потрібне:

define('WP_DEBUG', false);

... тому що, коли WP_DEBUGвимкнено, підпараметри тоді неактивні:

define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);

Майте на увазі, що заплутаний WP_DEBUG_LOGваріант стосується лише створення debug.logв каталозі wp-contentта не впливає на інші налаштування журналу тощо.

Знову ж таки, параметри в WordPress можуть змінити налаштування PHP за замовчуванням, тому ваші налаштування PHP мають не стільки значення, скільки правильні настройки у вашому wp-config.phpфайлі, які завантажуються перед іншими компонентами WP.

З огляду на це, корисно реалізувати налаштування за замовчуванням, як показано нижче, у виробництві:

error_reporting = E_ERROR | E_WARNING | E_PARSE
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/www/logs/error.log
log_errors_max_len = 1024
ignore_repeated_errors = On
ignore_repeated_source = Off
report_memleaks = On
xmlrpc_errors = 0
html_errors = Off

Для повного прикладу див. Наш файл php.ini SlickStack, оптимізований для Nginx та PHP-FPM.

В одному випадку, після кількох годин дослідження, ми зрозуміли, що плагін (або тема) перекриває різні налаштування обробки помилок, попередньо встановлені в php.iniта wp-config.php. Єдиний спосіб запобігти цьому - це видалити плагін WordPress або тему, яка намагається "зламати" ваші налаштування PHP, або запропонувати їм видалити, оскільки це дуже погана практика для розширень, які перекривають параметри налагодження вашої CMS.

У SlickStack ми створили сценарій Bash, який "позначає" будь ini_set-які error_reportingрядки та файли PHP у каталогах /themes/та /plugins/каталогах, виділяючи такі випадки, використовуючи плагін MU (скрипт PHP), який відображає список таких "хаків" на панелі керування WP адміністратора.

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