Ошибка Allowed memory size of N bytes exhausted означает, что скрипту не хватило памяти: превышен лимит памяти PHP, заданный параметром memory_limit. Быстрое решение - поднять лимит в настройках хостинга или в файле .user.ini, и сайт оживёт. Правильное решение - найти, какая операция съедает память: чаще всего это выгрузки, обмен с 1С, обработка больших картинок или неоптимальный код, который тянет из базы всё подряд. Ниже - оба пути: скорая помощь за 10 минут и лечение причины.
Где появляется ошибка памяти PHP и почему именно там
Ошибка редко валит весь сайт: обычно падает конкретное действие. В интернет-магазинах на Битрикс это выгрузка каталога в Excel, обмен с 1С, переиндексация поиска, копирование раздела с сотнями товаров. На витрине - страницы с огромными выборками и генерация превью для фотографий по 10-20 мегапикселей. Если же сайт падает целиком и постоянно, память тут чаще ни при чём - смотрите разбор в статье про ошибку 500: у неё десяток причин, и лимит памяти лишь одна из них.
Как поднять memory_limit: три способа по порядку
- Панель хостингаСамый надёжный путь: в разделе настроек PHP найдите memory_limit и поставьте 256M или 512M. На большинстве белорусских хостингов это доступно даже на дешёвых тарифах.
- Файл .user.ini или php.iniЕсли панель не даёт менять параметр, создайте в корне сайта файл .user.ini со строкой memory_limit = 512M. Изменение подхватывается за пару минут.
- Настройки БитриксВ bitrix/php_interface/dbconn.php лимит иногда задан жёстко через ini_set - тогда правки хостинга не работают, пока не поправить это значение. Частая ловушка после переезда сайта.
Ошибка памяти возвращается снова и снова?
Найдём скрипт, который съедает память, перепишем тяжёлые выборки и обмены: сайт перестанет падать на выгрузках и распродажах. Оценка задачи - бесплатно, до начала работ.
Почему PHP просит всё больше памяти: типовые обжоры в коде
- Выборки без фильтра - код запрашивает из базы все товары разом вместо постраничной обработки
- Обработка изображений - ресайз фотографии 8000 на 6000 пикселей требует сотни мегабайт, десяток таких в цикле - и лимит выбран
- Обмен с 1С одним куском - файл выгрузки на сотни тысяч позиций разбирается в память целиком вместо порционной загрузки
- Утечки в циклах - объекты копятся в массиве и не освобождаются, память растёт с каждой итерацией
- Старые модули - написаны под каталог на 500 товаров и не рассчитаны на нынешние 50 000
Частые вопросы про лимит памяти PHP
Какой memory_limit нормален для сайта на Битрикс?
Поднял memory_limit, а ошибка осталась. Почему?
Ошибка памяти появляется только при обмене с 1С. Что делать?
Может ли ошибка памяти быть признаком взлома сайта?
Итог: превышение лимита памяти лечится за 10 минут настройкой, но по-настоящему решается только поиском обжоры в коде. Первое вы теперь сделаете сами, для второго есть мы: доработка сайтов на Битрикс - перепишем тяжёлые места, настроим обмены и лимиты. С 2013 года, 450+ проектов, смета в течение дня.












