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