Задаю в wp-config.php отладочные параметры согласно инструкции в Codex:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
При этом лог-файл не создаётся, вывод в созданный вручную файл /wp-content/debug.log
не производится ни при каких настройках разрешений на файл.
На сервере включён php-fpm, может быть, в нём дело?
Причина
Да, проблема связана с php-fpm. Что делает WordPress при указании
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
в wp-config.php
? Код в wp-includes/load.php
довольно простой
if ( WP_DEBUG ) {
error_reporting( E_ALL );
if ( WP_DEBUG_DISPLAY )
ini_set( 'display_errors', 1 );
elseif ( null !== WP_DEBUG_DISPLAY )
ini_set( 'display_errors', 0 );
if ( WP_DEBUG_LOG ) {
ini_set( 'log_errors', 1 );
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
}
} else {
error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
}
Нам важна только одна строка
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
В ней WordPress пытается установить новый путь к файлу лога, а именно wp-content/debug.log
. Вот только при включённом php-fpm эта функция возвращает false и не срабатывает. Почему?
Потому что на сервере в файле /etc/php-fpm.d/www.conf
(в самом конце) по умолчанию установлено:
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
Вот эти параметры не могут быть перекрыты вызовом ini_set()
, в результате чего сделать вывод лога ошибок в wp-content/debug.log
не происходит.
TL;DR (Решение)
Надо закомментировать следующие строки на сервере в файле /etc/php-fpm.d/www.conf
;php_admin_value[error_log] = /var/log/php-fpm/www-error.log
;php_admin_flag[log_errors] = on
и перезапустить php-fpm
systemctl restart php-fpm
После чего файл лога будет успешно создаваться и лог ошибок будет записываться в wp-content/debug.log
.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Например, функция array_diff() принимает сколько угодно аргументов