Как увеличить лимит памяти для PHP более 2 ГБ?

У меня проблема с увеличением лимита памяти для PHP как модуль Apache.

Если я помещаю следующую директиву в конфигурацию Apache, это работает нормально:

php_value memory_limit 1.99G

но над 2GB не работают, он восстанавливает это значение обратно в 128MB.

в чем здесь проблема? Мне нужно больше памяти для некоторых задач, связанных с PDF.

сервер Debian 2.6.32-5-amd64 #1 SMP, PHP 5.3.3-7+squeeze13 с 12 ГБ физической оперативной памяти.

7 ответов


вы пробовали использовать значение в МБ ?

php_value memory_limit 2048M

попробовать редактирование это значение на php.ini не Apache.


Я бы предположил, что вы смотрите на проблему в неправильном свете. Questtion должен быть "что я делаю, что нужно 2G памяти внутри процесса apache с Php через модуль apache и этот набор инструментов лучше всего подходит для работы?'

Да, вы можете привязать Ракету к ford pinto, но это, вероятно, не правильное решение.

независимо от того, я предоставлю ракету, если она вам действительно нужна... вы можете добавить в начало сценария.

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

Это установите его только для сценария. Вам все равно нужно будет сказать apache, чтобы разрешить это для PHP-скрипта (я думаю).


для неограниченного лимита памяти set -1 на memory_limit переменной:

ini_set('memory_limit', '-1');

вы должны иметь 64-битную ОС на оборудовании, которое поддерживает 64-битную ОС, 64-битную версию Apache и то же самое для PHP. Но это не гарантирует, что функции, которые работают с PDF можно использовать такие большие размеры памяти. Вам лучше не загружать весь файл в память, разбивать его на куски или использовать файловые функции для поиска на нем без загрузки в ОЗУ.


для других, кто испытывает с той же проблемой, вот описание ошибки в php + патч https://bugs.php.net/bug.php?id=44522


введите следующее В конфигурацию Apache:

php_value memory_limit 2048M

вы также можете попробовать это:

ini_set("max_execution_time", "-1");
ini_set("memory_limit", "-1");
ignore_user_abort(true);
set_time_limit(0);