Ошибка PHP Fatal error: Allowed memory size exhausted — одна из самых частых проблем, с которыми сталкиваются пользователи WordPress. Она возникает, когда скрипт превышает лимит выделенной памяти PHP на сервере, из-за чего сайт перестает корректно работать или вовсе падает с белым экраном.
Почему возникает ошибка Allowed memory size exhausted
Основная причина — недостаточно выделенной оперативной памяти для выполнения PHP-скриптов. В WordPress это может происходить из-за тяжелых плагинов, тем с большим количеством функций, неправильных настроек или пиковых нагрузок.
Например, если на сайте установлен плагин, который обрабатывает большое количество данных (например, Clearfy Pro для оптимизации и исправления ошибок), и при этом лимит памяти установлен слишком низко, то можно столкнуться с данной ошибкой.
Еще одна причина — ошибки в коде, бесконечные циклы или неоптимальные запросы к базе данных. Они приводят к быстрому увеличению потребления памяти.
Как проверить текущий лимит памяти PHP
Для начала нужно узнать, сколько памяти выделено на выполнение PHP-скриптов. Для этого можно создать простой файл phpinfo.php с содержимым:
<?php
phpinfo();
?>
После открытия этого файла в браузере найдите параметр memory_limit. Например, значение может быть 128M, что означает 128 мегабайт.
Если значение слишком маленькое (например, 32M), то его стоит увеличить.
Способы увеличения лимита памяти PHP в WordPress
Вот несколько методов, которые помогут увеличить лимит памяти:
1. Изменение wp-config.php
Добавьте или измените строку в вашем wp-config.php перед /* That's all, stop editing! Happy blogging. */:
define('WP_MEMORY_LIMIT', '256M');
Это увеличит лимит памяти для фронтенда сайта.
2. Изменение php.ini
Если у вас есть доступ к файлу php.ini на сервере, найдите директиву memory_limit и измените ее:
memory_limit = 256M
После изменений перезапустите веб-сервер.
3. Файл .htaccess
Если используется Apache и разрешена директива, добавьте в .htaccess в корне сайта:
php_value memory_limit 256M
4. Через панель управления хостингом
Многие хостинги позволяют менять лимиты памяти через свои панели управления. Например, в разделе PHP-настроек укажите нужное значение памяти.
Пример функции для динамического увеличения памяти в WordPress
Вы можете добавить в файл functions.php вашей темы или в собственный плагин следующий код, чтобы попытаться увеличить лимит памяти программно:
function wperror_increase_memory_limit() {
if (ini_get('memory_limit') < '256M') {
ini_set('memory_limit', '256M');
}
}
add_action('init', 'wperror_increase_memory_limit');
Это не всегда сработает, если на уровне сервера установлены жесткие ограничения, но может помочь в некоторых случаях.
Оптимизация сайта для снижения потребления памяти
Увеличение памяти — это не всегда лучший путь. Часто стоит оптимизировать сайт, чтобы уменьшить нагрузку:
- Удалите или деактивируйте тяжелые и неиспользуемые плагины.
- Используйте кеширование. Например, плагин Clearfy Pro умеет оптимизировать загрузку и отключать лишние скрипты.
- Оптимизируйте изображения и медиа-файлы.
- Используйте темы с хорошо оптимизированным кодом, например Reboot.
- Проверьте кастомный код на наличие бесконечных циклов и неоптимальных запросов.
Диагностика с помощью плагинов
Для диагностики проблем с памятью можно использовать плагины:
- Query Monitor — показывает использование памяти и медленные запросы.
- WP Debugging — помогает выявить ошибки и предупреждения, связанные с памятью.
Установка Query Monitor:
function wperror_install_query_monitor() {
if ( !is_plugin_active('query-monitor/query-monitor.php') ) {
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
activate_plugin('query-monitor/query-monitor.php');
}
}
add_action('admin_init', 'wperror_install_query_monitor');
Выводы и рекомендации
Ошибка Allowed memory size exhausted — сигнал о том, что WordPress не хватает выделенной памяти для обработки запросов. Увеличение лимита памяти — первое решение, но важно также оптимизировать сайт, чтобы снизить нагрузку.
Используйте проверенные плагины, оптимизируйте темы и код, применяйте кеширование. Так вы избежите повторных проблем с памятью и повысите стабильность работы сайта.