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

14

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

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

tomdxw
источник
Это определенно предупреждения или фатальные ошибки?
TheDeadMedic
У меня была точно такая же проблема, это были ПРЕДУПРЕЖДЕНИЯ от GravityForms, в моем случае вывод предупреждения был: Предупреждение: целевой таргетинг «продолжить» эквивалентен «перерыв». Вы имели в виду использовать «продолжить 2»? в /plugins/gravityforms/common.php - нижеприведенный ответ Logic Digger работал для меня, чтобы исправить эту первую попытку, спасибо.
О. Г. Шон

Ответы:

8

WP_DEBUG не влияет на вывод ошибок PHP. В дополнение к настройке error_reporting, установите display_errors = 0 в вашем файле php.ini. По умолчанию он включен для разработки. Но вы захотите отключить его на производственных серверах.

Дейв Конопка
источник
Перефразируя wp-includes / load.php: if (WP_DEBUG) error_reporting (E_ALL). Но кажется, что некоторые плагины возятся с error_reporting и display_errors, когда их, вероятно, не должно быть.
tomdxw
1
Ах, вы правы, display_errors был установлен на On в моем 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.
О. Г. Шон
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

Полный пример приведен в нашем файле SlickStack php.ini, оптимизированном для Nginx и PHP-FPM.

В одном случае, после нескольких часов исследований, мы поняли, что плагин (или тема) переопределяет различные параметры обработки ошибок, ранее установленные в php.iniи wp-config.php. Единственный способ предотвратить это - удалить плагин или тему WordPress, которые пытаются «взломать» ваши настройки PHP, или попросить их удалить их, потому что это очень плохая практика, когда расширения переопределяют параметры отладки вашей CMS.

В SlickStack, мы создали скрипт Bash , что «флаги» любые ini_setи error_reportingстроки из PHP файлы в директориях /themes/и /plugins/каталоги, выделив такие экземпляры , используя MU плагин (PHP скрипт) , который отображает список таких «взломов» в WP администратора панели управления.

Джесси Никлес
источник