Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

или

php.ini  =>  memory_limit = 128M

или

php_value memory_limit 128M

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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