Гид по технологиям

Как увеличить память PHP при ошибке «PHP Fatal error: Out of memory»

4 min read PHP Обновлено 09 Oct 2025
Увеличение памяти PHP при ошибке Out of memory
Увеличение памяти PHP при ошибке Out of memory

Проблема

Ночью при модерации комментариев на сайте я увидел вместо панели администратора страницу ошибки со строкой примерно такого вида:

*PHP Fatal error: Out of memory (allocated 49545216) (tried to allocate 77824 bytes) in /home/xxxxx/public_html/xyz/admin.php(1758) on line 40*

Это означает, что PHP-скрипт потребовал больше оперативной памяти, чем ему разрешено в настройках (memory_limit).

Быстрое решение (временное)

Перезапуск веб-сервера (например, Apache httpd) иногда сразу решает проблему, потому что освобождает память. Это, однако, не устраняет первопричину.

Подробное руководство — 4 распространённых способа увеличить память

  1. Изменить php.ini
  • Найдите активный php.ini. Чтобы точно узнать, какой php.ini читает PHP, создайте файл в корне сайта (например, check.php) с содержимым:

Откройте этот файл в браузере и посмотрите путь к Loaded Configuration File. Обычно это что-то вроде /usr/local/lib/php.ini.

  • В текстовом редакторе (рекомендуется не простой Notepad на Windows) откройте php.ini и найдите параметр memory_limit. По умолчанию он может быть 8M.

Пример изменения:

memory_limit = 32M

Повышайте значение по необходимости: 12M → 16M → 24M → 32M и т.д. После изменения перезапустите веб-сервер.

  1. Установить лимит в самом скрипте

Если вы не можете править общесистемный php.ini, добавьте в начало проблемного PHP-файла (например, admin.php) строку:

ini_set('memory_limit', '32M');

Это влияет только на текущий процесс PHP и удобно для быстрого теста.

  1. Правка .htaccess

Если у вас есть доступ к .htaccess (Apache с модулем mod_php), можно добавить:

php_value memory_limit 32M

Обратите внимание: на некоторых хостингах (FastCGI, PHP-FPM) директивы в .htaccess не работают.

  1. Для WordPress: wp-config.php

Добавьте или измените строку в wp-config.php:

define('WP_MEMORY_LIMIT', '32M');

Это удобно для сайтов на WordPress и часто достаточно для плагинов/тем, которым нужно больше памяти.

Что делать, если не помогло

  • Убедитесь, что редактируете именно тот php.ini, который используется (см. phpinfo()).
  • На виртуальном или выделенном сервере проверьте, не ограничивает ли память сам контейнер/виртуальная машина или системные лимиты (ulimit).
  • На общих хостингах провайдер может принудительно ограничивать память — обратитесь в поддержку.

Как понять, какой скрипт потребовал память

Анализ может быть нетривиален. Начните с логов веб-сервера и PHP (error_log). Если в сообщении есть путь и номер строки — это указывает на проблемный файл.

Советы по диагностике:

  • Включите логирование ошибок и увеличьте детализацию (display_errors=Off, log_errors=On, error_reporting = E_ALL).
  • По возможности профилируйте скрипт (Xdebug, Blackfire, Tideways) — это покажет утечки и «тяжёлые» функции.
  • Ищите длинные циклы, рекурсию или создание больших массивов/объектов.

Практические шаблоны и сниппеты

Частые значения для теста:

  • Малые сайты: 16M–32M
  • CMS (WordPress, Drupal): 64M–128M
  • Сложные приложения/импорт: 256M и больше

Код для временного увеличения только для CLI-скрипта:

// В начале long-running скрипта для CLI
ini_set('memory_limit', '-1'); // отключить лимит памяти (только с осторожностью)

Важно: отключать лимит (-1) можно временно в контролируемой среде; на продакшене это может привести к исчерпанию ОЗУ.

Ментальные модели и эвристики

  • Если ошибка повторяется при одинаковом действии — это признак того, что конкретный код выделяет много памяти.
  • Растущие мем-сниффы при длительных процессах часто указывают на утечку (неосвобождённые ссылки на объекты).
  • Увеличение лимита — временная мера; идеальная цель — оптимизация кода.

Критерии приёмки

  • Ошибка «Out of memory» больше не появляется при том же сценарии.
  • Память увеличена минимально необходимым образом (не более чем требуется).
  • Нет деградации работы сервера: свободная память и swap в норме.
  • Логи не содержат новых критичных ошибок.

Контрольный чеклист для администратора

  • Проверил active php.ini через phpinfo()
  • Изменил memory_limit и перезапустил сервис
  • Проверил логи PHP и веб-сервера
  • Протестировал функциональность, вызвавшую ошибку
  • Если на хостинге — связался с поддержкой при неудаче

Когда увеличение памяти не помогает (контрпример)

  • На shared-хостинге провайдер может игнорировать пользовательские настройки и ограничивать процессы целиком.
  • Проблема может быть не в лимите, а в бесконечной рекурсии или ошибке, создающей гигантский массив — тут поможет профилирование.

Быстрый план действий (мини-SOP)

  1. Воспроизведите ошибку и сохраните текст сообщения.
  2. Посмотрите phpinfo() — определите конфигурацию.
  3. Попробуйте временно ini_set(‘memory_limit’, ‘32M’).
  4. Если помогло — примените решение в php.ini или .htaccess.
  5. Запустите профайлер для долгосрочной оптимизации.

Факто-бокс

  • Стандартный memory_limit на старых сборках PHP — 8M.
  • Современные CMS обычно требуют минимум 64M–128M для стабильной работы.

Резюме

Ошибка “PHP Fatal error: Out of memory” обычно решается увеличением параметра memory_limit в php.ini, через ini_set(), .htaccess или wp-config.php. Если после изменения лимита проблема остаётся, потребуется анализ кода и/или обращение к хостеру.

Важно: увеличивать лимит нужно разумно и параллельно исследовать корень проблемы — утечку памяти или неэффективный алгоритм.

Image Courtesy: Clarkandransom

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Скачать фильмы и сериалы Netflix офлайн
Руководство

Скачать фильмы и сериалы Netflix офлайн

Как добавить сайты в Flash whitelist на Windows RT
Руководство

Как добавить сайты в Flash whitelist на Windows RT

Запуск Photoshop CS5 в Ubuntu 10.10
Linux

Запуск Photoshop CS5 в Ubuntu 10.10

Как скачать фильмы и сериалы Netflix
How-to

Как скачать фильмы и сериалы Netflix

Как исправить: Firefox уже запущен, но не отвечает
Техническая помощь

Как исправить: Firefox уже запущен, но не отвечает

Учить кодирование вместо английского — Тим Кук
Новости

Учить кодирование вместо английского — Тим Кук