memory_limit не работает

Фатальная ошибка: Исчерпан разрешенный объем памяти 104857600 байт (попытался выделить 32345609 байт)

Это означает, что мне нужно 137203209 байт памяти для запуска моего php-скрипта.
Я получил эту ошибку, хотя у меня есть следующий код в скрипте.

 ini_set('memory_limit', 268435456); # 256 MB

Скрипт находится на моем сервере виртуального хостинга. У меня нет доступа к php.ini. memory_limit работал для других скриптов на том же хостинг-сервере.

Когда я проверил phpinfo() своего сервера, я увидел эти

suhosin.memory_limit - 128
memory_limit - 100M

Моему сценарию определенно нужно больше 128 МБ, потому что это сценарий отправки почты с большим вложенным файлом.


person Sithu    schedule 21.09.2012    source источник
comment
phpinfo(); и проверьте, изменил ли его ваш ini_set. Есть шанс (я бы сказал, 99%), что вам не разрешено это делать.   -  person zerkms    schedule 21.09.2012
comment
Вы уверены, что вам нужно столько памяти? Если вы это сделаете, возможно, вам не следует находиться на виртуальном хостинге. Также имейте в виду, что ошибки в вашем коде (например, бесконечный цикл) также могут вызвать эту ошибку, исчерпав всю доступную память.   -  person bfavaretto    schedule 21.09.2012
comment
@bfavaretto: на самом деле нет бесконечного цикла. Я успешно запустил скрипт на своем локальном хосте.   -  person Sithu    schedule 21.09.2012


Ответы (2)


suhosin.memory_limit - 128 не позволяет увеличить лимит памяти выше 128 МБ, установите его на 268435456, чтобы разрешить увеличение memory_limit до 256 МБ. Я сомневаюсь, что вы можете сделать это на виртуальном хостинге, потому что вам нужен доступ к файлу suhosin ini (вы не можете сделать что-то вроде ini_set('suhosin.memory_limit', 268435456);).

More about suhosin.memory_limit

person Nemoden    schedule 21.09.2012
comment
@SithuKyaw Сценарий редко должен использовать более 128 МБ, если вы не делаете что-то сверхтяжелое (обработка изображений и т. Д.) - person Ben D; 21.09.2012
comment
@Sithu Kyaw, это зависит :) Например. У меня есть скрипт, который определяет все перестановки ~ 30 слов - он потребляет много памяти (около 256 МБ), потому что я возвращаю около 25 тыс. строк, и до объединения каждое слово остается в массиве отдельно от других слов. Конечно, я могу оптимизировать его, добавив, например, каждый расчет перестановки в файл, но мне просто лень. Я мог бы оптимизировать его, если бы этот скрипт работал на производственном сервере, чтобы не влиять на другие процессы php, поэтому они падают из-за нехватки памяти. Хотя мне это и не нужно, я не утруждал себя этим. - person Nemoden; 21.09.2012

Вы находитесь на общем хосте, а общие хосты почти никогда не позволяют вам использовать функции ini_set('memory_limit',XXX) (иначе все всегда пытались бы захватить всю память сервера и заблокировать весь сервер). Проверьте phpinfo(), чтобы увидеть, включен ли безопасный режим... скорее всего, так и есть.

Кроме того, примечание: если вы хотите в любом случае установить ограничение памяти на 256 МБ, вы можете просто использовать:

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

записи вместо того, чтобы записывать целое число.

person Ben D    schedule 21.09.2012
comment
Я вижу, что на моем сервере отключен безопасный режим. - person Sithu; 21.09.2012