Допустимый объем памяти X байтов исчерпан
Неустранимая ошибка: допустимый объем памяти 67108864 байта исчерпан (попытался выделить 13965430 байтов)
PHPInfo показывает, что у меня memory_limit 128M, поэтому я не совсем понимаю, почему в сообщении об ошибке указано, что у меня только 64M. Возможно ли, что phpinfo сообщит неправильно? Или для PHP использовать два отдельных php.inis?
Ошибка была вызвана вызовом ini_set в одном из основных файлов php, который мой коллега добавил без моего ведома.
7 ответов
Конфигурация PHP может быть установлена в нескольких местах:
- мастер система
php.ini
(обычно где-то в / etc) - где-то в конфигурации Apache (httpd.conf или файл.conf для каждого сайта, через
php_value
) - CLI и CGI могут иметь разные
php.ini
(используйте командуphp -i | grep memory_limit
проверить CLI Conf) - локальные файлы.htaccess (также
php_value
) - в сценарии (через
ini_set()
)
В выводе PHPinfo значение "Master" - это значение по умолчанию, скомпилированное, а значение "Local" - то, что действительно действует. Он может быть либо неизменным по умолчанию, либо переопределен в любом из указанных выше мест.
Также обратите внимание, что 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');
Предоставлять неограниченное количество памяти - плохая практика, скорее мы должны дать максимальный предел, который мы можем выдержать, а затем оптимизировать наш код или добавить несколько ОЗУ.
Память должна быть настроена в нескольких местах.
Задавать 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
Если вы уверены, что перезапустили Apache после настройки php.ini, возможно, вы искали неправильный файл php.ini.
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
Если, увеличив предел памяти, вы избавились от ошибки и теперь ваш код работает, вам нужно будет принять меры, чтобы уменьшить использование этой памяти. Вот несколько вещей, которые вы можете сделать, чтобы уменьшить его:
Если вы читаете файлы, читайте их построчно, а не читайте весь файл в память. Посмотрите на fgets и SplFileObject::fgets. Обновите PHP до новой версии, если вы используете PHP 5.3. PHP 5.4 и 5.5 используют намного меньше памяти.
Избегайте загрузки больших массивов данных в массив. Вместо этого перейдите к обработке меньших подмножеств большего набора данных и, если необходимо, сохраните ваши данные в базе данных, чтобы уменьшить использование памяти.
Попробуйте последнюю версию или минорную версию сторонней библиотеки (например, 1.9.3 против вашей 1.8.2) и используйте любую более стабильную версию. Иногда новые версии библиотек пишутся более эффективно.
Если у вас необычное или нестабильное расширение PHP, попробуйте обновить его. Это может иметь утечку памяти.
Если вы имеете дело с большими файлами и просто не можете прочитать их построчно, попробуйте разбить файл на множество файлов меньшего размера и обработать их по отдельности. Отключите расширения PHP, которые вам не нужны.
В проблемной области удалите переменные, которые содержат большие объемы данных и не требуются позже в коде.
ОТ: https://www.airpair.com/php/fatal-error-allowed-memory-size
Эта проблема произошла из-за того, что определенный предел 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 cofigrations все детали. Таким образом, вы найдете свои изменения.
Примечание: для определения неограниченного числа просто добавьте -1 как php_value memory_limit -1 Это не очень хорошо и большую часть времени замедляет работу вашего сервера. Но если вы хотите быть меньше, то этот вариант также подходит для вас. Если после обновления изменения вашей страницы не будут отражены, вы должны перезапустить локальный сервер один раз для внесения изменений.
Удачи. Надеюсь, это поможет. Хотите скачать файл.htaccess, нажмите здесь.