Неустранимая ошибка: допустимый размер памяти 67108864 байт исчерпан (пытался выделить 13965430 байт)
PHPInfo показывает, что у меня есть memory_limit из 128M, поэтому я смущен, почему ошибка говорит, что у меня только 64M. Возможно ли, что phpinfo сообщит неправильно? Или для PHP использовать два отдельных php.inis?
Ошибка вызвана вызовом ini_set в одном из основных файлов php, добавленном моим коллегой, без моего ведома.
Конфигурация PHP может быть установлена в нескольких местах:
php.ini
(обычно в / etc где-то) php_value
) php.ini
(используйте команду php -i | grep memory_limit
для проверки CLI conf) php_value
) 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