проблема php memory_limit

0

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

Неустранимая ошибка: Недостаточно памяти (выделено 42729472) (попытался выделить 32 байта)

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

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

3 ответа

2
Лучший ответ

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

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

  • 0
    да установка его из php.ini сработала? в чем может быть проблема, что он не работал из ini_set ()
  • 0
    php.net/manual/en/ini.core.php
4

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

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

Также приятно знать: Рекомендации по производительности и Коллекция мусора

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

memory_limit integer. Это устанавливает максимальный объем памяти в байтах, который a script разрешено выделять. Эта помогает предотвратить плохо написанные сценарии для съедания всей доступной памяти на сервер. Обратите внимание, что для отсутствия памяти limit, установите эту директиву на -1.

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

Когда используется целое число, это значение равно измеренный в байтах. Сокращенная нотация, как описано в этом FAQ, также может быть б.

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

0

У меня раньше была аналогичная проблема. В моем случае это был пакет suhosin, предотвращающий получение script большего объема памяти.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню