Допустимый объем памяти X байтов исчерпан - PullRequest
39 голосов
/ 04 ноября 2010

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

PHPInfo показывает, что у меня предел памяти 128 МБ, поэтому я не понимаю, почемуошибка говорит, что у меня только 64M.Возможно ли, что phpinfo сообщит неправильно?Или для PHP использовать два отдельных php.inis?

Ошибка была вызвана вызовом ini_set в одном из основных файлов php, который мой коллега добавил без моего ведома.

Ответы [ 8 ]

36 голосов
/ 04 ноября 2010

Конфигурация PHP может быть установлена ​​в нескольких местах:

  1. главная система php.ini (обычно в / etc где-то)
  2. где-то в конфигурации Apache (httpd.conf или per-сайт .conf файл, через php_value)
  3. CLI и CGI могут иметь разные php.ini (используйте команду php -i | grep memory_limit для проверки конфигурации CLI)
  4. локальные файлы .htaccess(также php_value)
  5. в сценарии (через ini_set())

В выводе PHPinfo значение "Master" является значением по умолчанию для скомпилированного значения, а "Локальное "значение - это то, что на самом деле действует.Он может быть либо неизменным по умолчанию, либо переопределен в любом из указанных выше мест.

Также обратите внимание, что PHP обычно имеет разные INI-файлы для командной строки и работы на основе веб-сервера.Проверка phpinfo() из командной строки выдаст значения, отличные от тех, которые вы запускаете в веб-скрипте.

23 голосов
/ 27 марта 2011
ini_set('memory_limit', '128M'); 

или

php.ini  =>  memory_limit = 128M

или

php_value memory_limit 128M
15 голосов
/ 14 апреля 2012

У меня была такая же проблема.Я нашел ответ:

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

Примечание. Потребуется неограниченное использование памяти сервером.

Обновление: Используйте это осторожно, так как это может замедлить работу вашей системы, еслиPHP-скрипт начинает использовать слишком много памяти, что приводит к значительному использованию пространства подкачки.Вы можете использовать это, если знаете, что программа не займет много памяти, а также вы не знаете, сколько ее установить прямо сейчас.Но в конечном итоге вы обнаружите, сколько памяти вам требуется для этой программы.

Вы всегда должны ограничивать память как какое-то значение в ответе @ şarkı dinle.

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

Предоставление неограниченной памяти - этоплохая практика, скорее, мы должны дать максимальный предел, который мы можем выдержать, а затем оптимизировать наш код или добавить несколько ОЗУ.

5 голосов
/ 08 мая 2015

Память должна быть настроена в нескольких местах.
Установите memory_limit на 512M:

sudo vi /etc/php5/cgi/php.ini
sudo vi /etc/php5/cli/php.ini
sudo vi /etc/php5/apache2/php.ini Or /etc/php5/fpm/php.ini

Перезапустите службу:

sudo service service php5-fpm restart
sudo service service nginx restart

или

sudo service apache2 restart

Наконец, это должно решить проблему memory_limit

3 голосов
/ 04 ноября 2010

Если вы уверены, что перезапустили Apache после настройки php.ini, возможно, вы искали неправильный файл php.ini

2 голосов
/ 22 ноября 2017
1 check current limit:
(in my os)php -i | grep limit  => memory_limit => 256M => 256M

2  locate php.ini 
php --ini =>   
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/curl.ini 
...

3 change memory_limit in php.ini
vi /etc/php.ini
memory_limit = 512M

4 restart nginx and (php-fpm if being used)
service php-fpm restart
service nginx restart
1 голос
/ 17 декабря 2015

Если, увеличив предел памяти, вы избавились от ошибки и теперь ваш код работает, вам нужно будет принять меры, чтобы уменьшить использование памяти.Вот несколько вещей, которые вы можете сделать, чтобы уменьшить его:

Если вы читаете файлы, читайте их построчно вместо чтения всего файла в память.Посмотрите на fgets и SplFileObject :: fgets.Обновите PHP до новой версии, если вы используете PHP 5.3.PHP 5.4 и 5.5 используют намного меньше памяти.

Избегайте загрузки больших массивов данных в массив.Вместо этого перейдите к обработке меньших подмножеств большего набора данных и, если необходимо, сохраните ваши данные в базе данных, чтобы уменьшить использование памяти.

Попробуйте последнюю версию или минорную версию сторонней библиотеки (1.9.3по сравнению с вашей 1.8.2, например) и использовать тот, который является более стабильным.Иногда более новые версии библиотек пишутся более эффективно.

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

Если вы работаете с большими файлами и просто не можете прочитать их построчно, попробуйте разбить файл на множество небольших файлов и обработать их по отдельности.Отключите ненужные расширения PHP.

В проблемной области удалите переменные, которые содержат большие объемы данных и не требуются позже в коде.

FROM: https://www.airpair.com/php/fatal-error-allowed-memory-size

0 голосов
/ 15 марта 2019

Эта проблема возникает из-за того, что предел php.ini был превышен, но есть множество решений для этого, но простое - найти папку на локальном сервере, найти папку php и в этой папке есть файл php.ini, которыйесть все объявления этих настроек типа.Вам просто нужно найти один и изменить это значение.Но в этой ситуации есть одна большая проблема, когда вы изменяете свой файл localhost, но что касается сервера, когда вы хотите разместить свой сайт на сервере, он снова вызывает ту же проблему, и вы снова следуете за сервером.Но вы также знаете о файле .htaccess, это одно из лучших и единственных мест, где можно многое сделать, не меняя основные файлы.Как вы меняете маршрутизацию www, удаляя .php или другие расширения из URL или добавляя одно.Точно так же, как здесь вы также задаете значения по умолчанию для php.ini вот так: сначала вам нужно открыть файл .htaccess из вашего корневого каталога или, если у вас его нет, создайте его в корневом каталоге вашего сайта и вставьте егокод на нем -

php_value upload_max_filesize 1000M
php_value post_max_size 99500M
php_value memory_limit 500M
php_value max_execution_time 300

после изменений, если вы хотите проверить изменения, просто запустите php-код

<?php phpinfo(); ?> 

, он покажет вам все настройки php.Итак, вы нашли свои изменения.

Примечание: для определения неограниченного количества просто добавьте -1, например, php_value memory_limit -1 Это не очень хорошо, и большую часть времени замедляет работу вашего сервера.Но если вы хотите быть меньше, то этот вариант также подходит для вас.Если после обновления изменения вашей страницы не будут отражены, вы должны перезапустить локальный сервер для изменений.

Удачи.Надеюсь, это поможет. Чтобы скачать файл .htaccess, нажмите здесь.

...