Допустимый размер памяти X байтов

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

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

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

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

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

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

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

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

или

 php.ini => memory_limit = 128M 

или

 php_value memory_limit 128M 

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

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

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

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

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

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

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

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

Память должна быть настроена в нескольких местах.
Установите 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

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

Если вы читаете файлы, читайте их поочередно, а не читайте в полном файле в памяти. Посмотрите на 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

 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