2010-09-20 2 views
0

Один из моих сценариев требует большой памяти. и, вероятно, из-за этого я получаю следующее сообщение об ошибкеphp memory_limit issue

Fatal error: Out of memory (allocated 42729472) (tried to allocate 32 bytes)

Я попытался изменить memory_limit с помощью ini_set («memory_limit», «256M»); в верхней части моей страницы, но все же я получаю одинаковые проблемы. Я также попытался ini_set ('memory_limit', '512M'); но не повезло.

+1

Какая операция вызывает эту ошибку? Вам нужно отладить ваш код, чтобы изолировать причину этого. Кроме того, где вы вызываете 'ini_set ('memory_limit', '512M');', локальная машина? сайт? –

ответ

2

Это сбой после 42M, что говорит мне, что интерпретатор PHP не получил заметку. Попробуйте тот же ini_set() на тестовой странице с выводом phpinfo() и найдите ограничение памяти.

Вместо этого вы можете установить его в файле php.ini?

+0

Да, настроено ли это из php.ini? что может быть проблемой, из-за которой он не работал с ini_set() – Prakash

+0

http://php.net/manual/en/ini.core.php – teemitzitrone

4

У вас есть доступ к файлу php.ini? Затем измените значение memory_limit.

Вы также должны проанализировать свой сценарий. Много транзакций базы данных? Многие из них в петлях? Много петель? Много временных переменных? Умное использование unset может иметь огромное значение.

Также приятно знать: Performance Considerations и Garbage Collection

Edit (возможный ответ на ваш вопрос, почему memory_limit не работает с ini_set)

memory_limit integer This sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server. Note that to have no memory limit, set this directive to -1.

Prior to PHP 5.2.1, in order to use this directive it had to be enabled at compile time by using --enable-memory-limit in the configure line. This compile-time flag was also required to define the functions memory_get_usage() and memory_get_peak_usage() prior to 5.2.1.

When an integer is used, the value is measured in bytes. Shorthand notation, as described in this FAQ, may also be used.

Источник: php.net

0

Раньше у меня был similar issue. В моем случае это был пакет suhosin, который мешал моему скрипту получать больше памяти.