Всем привет. Очень часто попадается следующая ошибка, которая начинается с текста на английском: “Fatal error: Allowed memory size…“, возникающая при открытии страниц сайтов — Это ошибка исчерпания лимита памяти.

Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes) in /home/example/example.com/www/path/to/script.php on line Z
Х— доступный объём памяти, заданный параметром PHP memory_limit, в байтах.Y— объём памяти, который скрипт пытался использовать сверх доступного объёма в момент возникновения ошибки, в байтах.- /home/example/example.com/www/path/to/script.php — полный путь к скрипту, при выполнении которого возникла ошибка.
Z— номер строки в скрипте, где возникла ошибка.
Сумма значений
X+Yне является требуемым значением memory_limit, посколькуYпоказывает количество памяти, которого не хватило на момент аварийного завершения скрипта, и в случае дальнейшей работы скрипт может затребовать гораздо больший объем памяти.
Возможные причина ошибки “Fatal error: Allowed memory size”
Чаще всего ошибка возникает в следующих ситуациях:
- Самая распространённая ситуация, при которой скрипт исчерпывает всю доступную память — это плагины (изредка проблема возникает после обновления версии движка, но как правило в процессе активации, деактивированных перед обновлением WordPress плагинов).
- это работа с изображениями. Форматы PNG и JPG сжимают изображение, но для работы с ним PHP загружает его в память попиксельно, будто оно сохранено в формате BMP. Это приводит к тому, что скрипту не хватает памяти для обработки изображения. Чтобы ошибка не возникала, стоит уменьшать размеры изображений перед их загрузкой на сайт и не рассчитывать на то, что PHP сам изменит формат изображений в высоком разрешении.
- Выполнение запросов к базе данных, возвращающих слишком большие объёмы информации, которые не вмещаются в доступную память.
- Обработка XML-файлов большого объёма.
Как исправить ошибку “Fatal error: Allowed memory size”
Для решения данной задачи предлагаю четыре варианта на выбор в зависимости от прав доступа на сервере и его конфигурации.
Один из этих вариантов вам точно поможет.
Первый способ
Самый простой, но длительный по времени: написать в техподдержку компании, предоставляющей хостинг. Специалисты все исправят и вы вновь у руля. Однако, может случиться, что это поможет на 3-5 дней (как было у меня) и снова та же ошибка памяти. После 3-х писем в техподдержку мне посоветовали сменить CMS. Но я гордый и начал копать дальше.
Второй способ
Внести в файл .htaccess вашего сайта строку:
php_value memory_limit '64M'
Если файла .htaccess у вашего сайта нет, то сделайте его: берем пустой txt файл (файл блокнота) и вносим туда вышеуказанную строку. Затем переносим это дело с помощью FTP клиента на сервер и там переименовываем в .htaccess. Устанавливаем атрибуты 777, проверяем сработало или нет. Опять же зависит всё от хостинга. Если и это не помогло, то…
Третий способ
Похож на второй, только работаем в другими файлами. Открываете index.php в корне вашего сайта и добавляете в него следующий код:
define(‘WP_MEMORY_LIMIT’, ’64M’);
Разрешенный объем оперативки для сайта вырастет до 64 мегабайт. Для WordPress сайта этот же код вставьте в файл конфигурации wp-config.php. Если хостинг провайдер не выключил в настройках сервера поддержку ini_set, то проблема должна решиться.
Четвертый способ – лучший
Гарантировано избавит вас от ошибки, так как решает саму причину ошибки. Но, возможно, придется пожертвовать плагином. Заходим в админку вкладка «плагины» и начинаем по очереди их деактивировать, проверяя при этом, после каждой деактивации наличие ошибки. Плагин-проказник обязательно найдется, после этого активируйте все плагины, которые не вызывают ошибку.
Если сайт полностью лежит и нет возможности делать манипуляции с админкой, то зайдите на хостинг. Откройте папку wp-content/plugins, скопируйте все плагины к себе на компьютер и поочередно удаляйте один за другим, проверяя – заработал ли сайт.
Кстати, такое решение лечит и другие ошибки.
Если плагин очень нужный и полезный, то следует поиграть версиями: попробовать более свежий или наоборот, более старый. Или найдите аналог. В любом случае нужно придти к консенсусу.
Ваш отзыв будет первым.
