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

10 июн. 2011 г., 16:36:12
Просмотры: 42.9K
Голосов: 21

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

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

2
Комментарии

Это точно предупреждения или критические ошибки?

TheDeadMedic TheDeadMedic
10 июн. 2011 г. 18:52:35

У меня была точно такая же проблема, это были ПРЕДУПРЕЖДЕНИЯ от GravityForms. В моем случае вывод предупреждения был: Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /plugins/gravityforms/common.php - Ответ Logic Digger ниже сработал для меня идеально, я просто скопировал/вставил и исправил это с первой попытки, спасибо.

OG Sean OG Sean
14 февр. 2020 г. 21:12:23
Все ответы на вопрос 7
2
35

Замените

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);
18 окт. 2015 г. 22:06:40
Комментарии

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

fuxia fuxia
18 окт. 2015 г. 22:09:14

Возможно, ошибки на экране отключены, но вы можете увидеть их в журнале ошибок на вашем сервере.

user2060451 user2060451
28 окт. 2016 г. 21:00:58
2
11

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

11 июн. 2011 г. 04:50:13
Комментарии

Перефразируя wp-includes/load.php: if(WP_DEBUG)error_reporting(E_ALL). Но действительно кажется, что несколько плагинов вмешиваются в error_reporting и display_errors, хотя им, вероятно, не следует этого делать.

User User
13 июн. 2011 г. 16:24:40

Ах, вы правы - display_errors было установлено в On в моем php.ini. Я просто предположил, что WP_DEBUG обрабатывает все ошибки. Спасибо.

User User
13 июн. 2011 г. 16:32:59
1

Также возможно, что эта строка уже установлена в 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 апр. 2018 г. 13:15:07
Комментарии

Спасибо, это помогло скрыть предупреждения на фронтенде. WP_DEBUG уже был установлен в false.

OG Sean OG Sean
14 февр. 2020 г. 21:12:58
0

В среде WordPress обычно нет необходимости использовать ini_set, потому что это уже достигается с помощью определенных констант, предоставляемых ядром WordPress. Как работает 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, который загружается до других компонентов WordPress.

Тем не менее, в продакшене рекомендуется реализовать стандартные настройки, как показано ниже:

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-скрипта), который отображает список таких "взломов" в админ-панели WordPress.

20 нояб. 2019 г. 14:10:28
1

Попробуйте отключить/подавить все предупреждения и уведомления об ошибках в вашем файле wp-config.php (в самом начале). В любом случае: ошибки — это не плохо. Они дают вам возможность исправить свой код.

10 июн. 2011 г. 17:47:11
Комментарии

Думаю, это были другие плагины, которые вмешивались в настройки error_reporting, что вызвало эту проблему.

User User
13 июн. 2011 г. 16:41:41
0

Ни одно из вышеперечисленных решений мне не помогло.

Для меня решением стало добавление php-файла в папку mu-plugins. Просто создайте php-файл и добавьте следующую строку.

error_reporting(E_ALL & ~( E_NOTICE ));

После этого загрузите его в папку mu-plugins (если папка не существует, создайте её в папке wp-content).

12 дек. 2021 г. 20:08:31
0

В моём случае проблема была в том, что WP_DEBUG был установлен в 'false', а не false, что, как я понимаю, интерпретируется как true, так как это строка.

Поэтому попробуйте

define('WP_DEBUG', false);

если у вас указано

define('WP_DEBUG', 'false');
5 авг. 2024 г. 12:13:21