Конфигурация php.ini для эффективной работы WordPress
Основные директивы php.ini для WordPress
Оптимальный базовый набор параметров
Для стабильной работы большинства сайтов на WordPress рекомендуется установить следующие значения в php.ini:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 180
max_input_time = 180
max_input_vars = 3000
Эти значения позволяют обрабатывать плагины, темы и медиафайлы среднего размера, а также выполнять длительные операции (например, импорт данных). Память 256 MB достаточно для обычного сайта с 10-20 активными плагинами.
Как избежать ошибки «Allowed memory size exhausted»?
Ошибка возникает при нехватке памяти для выполнения PHP-скрипта. Решение - увеличить параметр memory_limit.
Варианты:
- Для сайтов с большим количеством плагинов или тяжёлыми темами - установить 512M.
- Для сайтов на виртуальном хостинге с ограниченными ресурсами - 128M (минимальный порог).
- Для мультисайтовых (WordPress Multisite) - рекомендуется 256M-512M.
Возможные проблемы:
Установка слишком высокого значения (более 1024M) на сервере с малым объёмом оперативной памяти может привести к OOM-сбоям или перегрузке сервера. Также некоторые веб-хостинги ограничивают лимит памяти через конфигурацию основного пула PHP-FPM.
Решение:
Перед изменением лимита проверить доступную память с помощью команды free -h или через панель управления хостингом. Если лимит недоступен, стоит обратиться к провайдеру или использовать константу WP_MEMORY_LIMIT в wp-config.php (она переопределяет значение только для WordPress).
Как настроить загрузку больших файлов (например, тем или видео)?
За загрузку отвечают два параметра: upload_max_filesize (максимальный размер одного файла) и post_max_size (максимальный общий размер данных POST-запроса).
Варианты:
- Для загрузки медиафайлов вплоть до 128 MB - upload_max_filesize = 128M, post_max_size = 130M (должен быть чуть больше, так как включает служебные данные).
- Для сайтов с частой загрузкой архивов тем и плагинов - 256 MB.
- Если не требуется загрузка больших файлов, достаточно 32 MB.
Типичные ошибки:
После изменения php.ini загрузка всё равно не работает, если превышены лимиты на уровне веб-сервера (например, client_max_body_size в nginx или LimitRequestBody в Apache). Также возможна ошибка «The uploaded file exceeds the upload_max_filesize directive».
Решение:
Проверить настройки веб-сервера и согласовать их с php.ini. Для nginx: client_max_body_size 128M;. Для Apache: LimitRequestBody 134217728 (значение в байтах).
Как увеличить время выполнения длительных скриптов (например, импорт XML)?
Параметры max_execution_time и max_input_time ограничивают время работы скрипта и время парсинга входных данных.
Варианты:
- Для импорта/экспорта больших объёмов данных - 300 секунд.
- Для регулярных фоновых задач (cron) - 600 секунд.
- Для обычных сайтов - 60 секунд.
Возможные последствия:
Очень длинное время выполнения может привести к зависанию веб-сервера при одновременных запросах. Также некоторые плагины (например, для резервного копирования) могут не соблюдать лимиты и вызовут 504 Gateway Timeout.
Решение:
Настроить веб-сервер на более длинное ожидание (например, proxy_read_timeout для nginx). Использовать обработку задач через WP-Cron или внешний cron вместо синхронного выполнения.
Как увеличить количество переменных запроса (для сложных мета-боксов)?
Параметр max_input_vars ограничивает число переменных, которые могут быть приняты в одном запросе (например, при сохранении поста с множеством кастомных полей).
Варианты:
- Стандартное значение - 1000. Для сайтов с большим количеством ACF-полей или редакторами блоков - 3000-5000.
Ошибка:
Если превышено значение, форма сохранения может не сработать без видимых сообщений, часть полей будет потеряна.
Решение:
Увеличить max_input_vars до адекватного значения. Проверить текущее значение через ini_get('max_input_vars').
Расширенные примеры настройки php.ini для WordPress
Пример 1: Изменение memory_limit через php.ini и проверка через phpinfo()
Допустим, требуется установить лимит памяти 512 MB. Необходимо найти активный php.ini:
php --ini | grep 'Loaded Configuration File'
Результат (пример):
Loaded Configuration File: /etc/php/8.2/apache2/php.ini
Отредактировать файл, заменив строку:
memory_limit = 512M
Перезагрузить веб-сервер:
sudo systemctl restart apache2 # для Apache
sudo systemctl restart php8.2-fpm # для PHP-FPM
Проверить новое значение:
php -r 'echo ini_get("memory_limit");'
Результат:
512M
Пример 2: Настройка upload_max_filesize и post_max_size в .htaccess (Apache)
Если нет доступа к php.ini, можно задать директивы через .htaccess (требует mod_php или PHP как модуль Apache):
php_value upload_max_filesize 128M
php_value post_max_size 130M
php_value max_execution_time 300
После добавления этих строк в корневой .htaccess WordPress проверить результат с помощью phpinfo() в файле info.php:
<?php phpinfo(); ?>
В секции «Loaded Configuration File» отобразится «(none)», но директивы будут активны.
Для Nginx через PHP-FPM: настройки в пуле
; /etc/php/8.2/fpm/pool.d/www.conf
php_admin_value[memory_limit] = 256M
php_admin_value[upload_max_filesize] = 64M
php_admin_value[post_max_size] = 64M
После изменений перезагрузить PHP-FPM:
sudo systemctl restart php8.2-fpm
Пример 3: Использование WP_MEMORY_LIMIT в wp-config.php
Константа WP_MEMORY_LIMIT задаёт лимит памяти только для WordPress, не затрагивая другие скрипты:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M'); // для страниц админки
Добавить эти строки перед /* That's all, stop editing! Happy blogging. */. После сохранения проверить через инструмент «Здоровье сайта» в админпанели: значение должно отображаться как 256M и 512M соответственно.
Пример 4: Динамическое изменение max_execution_time через functions.php
Иногда требуется увеличить время для конкретной страницы (например, для импорта). Это возможно с помощью ini_set() в functions.php темы или в плагине:
function wp_custom_execution_time() {
if ( is_admin() && isset($_GET['page']) && $_GET['page'] === 'my-import-page' ) {
ini_set('max_execution_time', 600);
}
}
add_action('init', 'wp_custom_execution_time');
Важно: ini_set() работает только если PHP-режим не запрещает динамическое изменение (часто отключено в безопасности). Если директива не меняется, ini_set() вернёт false.
Пример 5: Проверка текущих значений PHP-директив изнутри WordPress
Можно вывести все важные для WordPress параметры:
echo 'Memory limit: ' . ini_get('memory_limit') . '<br>';
echo 'Max upload: ' . ini_get('upload_max_filesize') . '<br>';
echo 'Post max: ' . ini_get('post_max_size') . '<br>';
echo 'Max exec time: ' . ini_get('max_execution_time') . ' sec<br>';
echo 'Max input vars: ' . ini_get('max_input_vars') . '<br>';
Результат (пример для базовой установки):
Memory limit: 256M Max upload: 64M Post max: 64M Max exec time: 180 sec Max input vars: 3000
Пример 6: Использование .user.ini (для CGI/FastCGI)
Некоторые хостинги позволяют создать файл .user.ini в корне сайта:
memory_limit = 128M
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 120
Изменения вступают в силу без перезагрузки. Проверить, применяется ли .user.ini, можно через phpinfo(): должна появиться строка «User ini file».