Фатальная ошибка допустимый объем памяти байтов 134217728 исчерпан
Ваш сайт WordPress нуждается в компьютерной памяти для работы. Иногда выделенной памяти может быть недостаточно для запуска вашего сайта, и вы увидите такую ошибку ограничения памяти WordPress:
fatal error: allowed memory size of 67108864 bytes exhausted
Вторая ошибка, указывающая на нехватку памяти в WordPress, — это белый «экран смерти». Если ваш сайт не работает, и все, что вы видите, это белый экран, у WordPress заканчивается память.
Постоянно
Вы можете навсегда изменить распределение памяти PHP двумя способами.
Если у вас есть доступ к вашему файлу php.ini , вы можете отредактировать значение memory_limit по своему желаемому значению.
Если у вас нет доступа к вашему файлу php.ini (и ваш веб-хост его разрешает), вы можете переопределить выделение памяти через ваш файл .htaccess . Добавьте php_value memory_limit 128M (или любое другое ваше выделение).
Альтернативное решение-найти скрипт, вызывающий ошибку
Исправление выше может помочь вам быстро избавиться от проблемы. Но бывают ситуации, когда лучше найти скрипт, требующий больше памяти, и удалить его.
Если, например, вам нужно увеличить выделенную память выше 256M, то этот скрипт уже занимает слишком много памяти. Это может испортить производительность вашего сайта.
В некоторых случаях ваш хост может вообще не разрешить вам увеличить объем памяти. В этом случае вы можете связаться с вашим хостом и попросить его увеличить объем памяти. Или еще лучше, вы можете отследить причину проблемы и избавиться от нее.
В первую очередь нужно проверить ваши плагины. Если вы установили плагин WordPress незадолго до возникновения этой ошибки, то в нем, скорее всего, причина.
Если отключение плагина не решает проблему, то возможно виновата ваша текущая активная тема.
Как удалить плагин и тему без доступа к админ панели узнайте в следующих статьях.
Хакер, желающий получить доступ к сайту WordPress с помощью грубой Read more
Аренда серверов — это популярная услуга по аренде места и Read more
С таким количеством функций и опций, доступных для WordPress, пользователи Read more
Таблицы и диаграммы — это отличные инструменты для подготовки и Read more
Доменное имя WordPress предоставляет собой средство поиска и идентификации сайта Read more
Добавление видеоконтента на ваш сайт может быть отличным способом привлечения Read more
У меня есть куча систем клиентской точки продажи (POS), которые периодически отправляют новые данные о продажах в одну централизованную базу данных, которая хранит данные в одной большой базе данных для генерации отчетов.
Клиентский POS основан на PHPPOS, и я внедрил модуль, который использует стандартную библиотеку XML-RPC для отправки данных о продажах в службу. Серверная система построена на CodeIgniter и использует библиотеки XML-RPC и XML-RPCS для компонента webservice. Всякий раз, когда я отправляю много данных о продажах (всего лишь 50 строк из таблицы продаж и отдельных строк из sales_items, относящихся к каждому элементу в продаже), я получаю следующую ошибку:
128M - значение по умолчанию в php.ini , но я предполагаю, что это огромное количество сломать. На самом деле, я даже попытался установить это значение на 1024 М, и все, что он делает, занимает больше времени для выхода из системы.
Что касается шагов, которые я предпринял, я попытался отключить всю обработку на стороне сервера и сфальсифицировал его, чтобы возвращать консервированный ответ независимо от ввода. Однако я считаю, что проблема заключается в фактической отправке данных. Я даже попытался отключить максимальное время выполнения script для PHP, и он все еще не работает.
Что вызывает фатальную ошибку ограничения памяти WordPress
Веб-серверы устанавливают ограничение на объем памяти. Ограничение памяти является необходимой функцией для защиты серверов. Веб-серверам требуется достаточно памяти для одновременного запуска многих приложений.
Если память, используемая PHP-скриптами, не ограничена, плохо написанный скрипт может использовать всю память. Это приведет к сбою сервера и сделает ваш сайт и все другие сайты на этом сервере недоступными.
Поскольку WordPress состоит из скриптов, написанных на PHP, он связан ограничениями памяти, установленными для PHP-скриптов.
Таким образом, если одному из ваших скриптов требуется больше памяти, чем может быть выделено, у него заканчивается память, и вы видите ошибку WordPress allowed memory size exhausted.
Когда это происходит, вы почти всегда можете проследить проблему до плагина или в некоторых случаях до темы. Маловероятно, что ваши основные скрипты WordPress потребуют больше, чем выделенная память для запуска.
Увеличение лимита памяти PHP в WordPress — простое решение
По дизайну WordPress сначала пытается увеличить ваш лимит памяти до 64 Мб. Появление этой ошибки указывает на то, что этого размера все еще недостаточно, или в некоторых случаях ваш сервер предотвращает выделение большего объема памяти.
Вы можете вручную увеличить лимит памяти в WordPress, отредактировав файл wp-config.
Для этого подключитесь к своему сайту с помощью FTP-клиента FileZilla.
При подключении папки и файлы вашего сайта будут отображаться в правом нижнем углу экрана. Найдите папку, содержащую все ваши файлы WordPress, и дважды щелкните ее, чтобы открыть.
В этой папке найдите файл wp-config, щелкните его правой кнопкой мыши и выберите команду просмотр/редактирование.
Когда файл откроется в текстовом редакторе, прокрутите его вниз, чтобы найти строку “That’s all, stop editing! Happy blogging.” Вставьте следующий код над этой строкой.
Сохраните этот файл и закройте редактор. FileZilla предложит вам загрузить отредактированный файл.
Теперь перезагрузите свой сайт. Проблема должна быть исправлена и ваш сайт должен отображаться правильно.
Временный
Вы можете настроить выделение памяти на лету из файла PHP. У вас просто есть код ini_set('memory_limit', '128M'); (или любое другое желаемое распределение). Вы можете удалить ограничение памяти (хотя ограничения для компьютеров или экземпляров все еще могут применяться), установив значение «-1».
Спасибо, я не подумал проверить, установил ли кто-нибудь значение в .htaccess, которое переопределяет php.ini, и я не мог понять, почему +1
Для тех, кому нужно установить временное с помощью команд: php -d memory_limit=256M your_php_file.php или php -d memory_limit=256M artisan .
Очень легко получить утечку памяти в сценарии PHP, особенно если вы используете абстракцию, такую как ORM. Попробуйте использовать Xdebug для профилирования вашего скрипта и выясните, куда ушла вся эта память.
Пойду попробую Xdebug. Я никогда не использовал его раньше, поэтому мне придется его прочитать. Спасибо за ответ! Надеюсь, я скоро найду ответ на этот вопрос .
Помните, что PHP использует подсчет ссылок для управления памятью. Поэтому, если у вас есть циклические ссылки или глобальные переменные, эти объекты не будут переработаны. Обычно это корень утечек памяти в PHP.
Xdebug показывает, что за мою утечку памяти отвечает библиотека CI Xmlrpc.php. Случайно, возникнут ли какие-либо проблемы с библиотеками XML-RPC CodeIgniter, о которых мне следует знать? Я попытался отключить всю обработку на стороне сервера, но у него все равно заканчивается память, если я скармливаю ему достаточно данных.
Я не знаю / использую CI, поэтому не знаю. Но вам, вероятно, следует попытаться найти объект, который не освобождается после использования - скорее всего, из-за циклической ссылки. Это детективная работа.
Это единственный ответ, который советует решить проблему. Другие ответы заставляют память перевязать симптом и игнорировать болезнь .
вверху файла. Теперь все работает нормально. Я не знаю, есть ли в PHP утечка памяти. Это не моя работа, и меня это не волнует. Мне просто нужно выполнить свою работу, и это сработало.
Программа очень проста:
Фатальная ошибка указывает на строку 3, пока я не увеличил предел памяти, что устранило ошибку.
Какая роскошь было бы иметь время пойти и оптимизировать сценарий для чего-то в этом роде. Или исследуйте, сравнивайте и изучайте инструменты ETL или что-то в этом роде. В реальном мире мы увеличиваем объем памяти, делаем то же самое и идем дальше.
Я продолжал получать эту ошибку, даже при memory_limit установке php.ini и правильном считывании значения с phpinfo() .
Это устранило проблему в PHP 7.
Когда вы видите указанную выше ошибку - особенно если (tried to allocate __ bytes) это низкое значение, это может быть индикатором бесконечного цикла, например, функции, которая вызывает сама себя без выхода:
Корневой каталог вашего сайта:
Измените память, например со 128 на 512, см. Ниже
После включения этих двух строк он начал работать:
Для пользователей Drupal это ответ Криса Лейна:
работает но надо ставить сразу после открытия
в файле index.php в корневом каталоге вашего сайта.
Вместо того, чтобы изменять memory_limit значение в вашем php.ini файле, если есть часть вашего кода, которая может использовать много памяти, вы можете удалить memory_limit перед запуском этого раздела, а затем заменить его после.
В Drupal 7 вы можете изменить ограничение памяти в файле settings.php, расположенном в папке sites / default. В строке 260 вы увидите следующее:
Даже если ваши настройки php.ini достаточно высоки, вы не сможете использовать более 128 МБ, если это не установлено в вашем файле settings.php Drupal.
Измените ограничение памяти в файле php.ini и перезапустите Apache. После перезагрузки запустите phpinfo (); функция из любого файла PHP для memory_limit подтверждения изменения.
Ограничение памяти -1 означает, что ограничение памяти не установлено. Сейчас это максимум.
Просто добавьте ini_set('memory_limit', '-1'); строку вверху своей веб-страницы.
И вы можете установить память в соответствии с вашими потребностями вместо -1, до 16M и т. Д.
Похоже, это говорит то же самое, что и многие существующие ответы. Лучше всего добавлять ответ на популярный вопрос, только если новый материал предлагает что-то новое.
Некоторые хосты cPanel принимают только этот метод.
Аварийная страница?
(Это происходит, когда MySQL запрашивает большие строки. По умолчанию memory_limit установлено значение small, что было безопаснее для оборудования.)
Вы можете проверить состояние существующей памяти вашей системы, прежде чем увеличивать php.ini :
На какое число (строку и столбец?) Следует смотреть после выполнения free -m команды, чтобы определить новый предел memory_limit?
Для тех, кто ломает голову над тем, чтобы выяснить, почему эта маленькая функция должна вызывать утечку памяти, иногда из-за небольшой ошибки функция начинает рекурсивно вызывать себя навсегда.
Например, прокси-класс, который имеет то же имя, что и функция объекта, который будет его прокси.
Иногда вы можете забыть принести этот маленький фактический член Objec, и поскольку прокси-сервер действительно имеет этот doSomething метод, PHP не выдаст вам никаких ошибок, а для большого класса он может быть скрыт от глаз на пару минут, чтобы выяснить, почему он утекает память.
И еще один совет: вы можете вставить die('here') свой код и переместить этот оператор, чтобы увидеть, где начинается рекурсия.
У меня была ошибка ниже при работе с набором данных меньшего размера, чем работало ранее.
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes) in C:\workspace\image_management.php on line 173
Поскольку поиск неисправности привел меня сюда, я подумал, что упомянул, что это не всегда технические решения в предыдущих ответах, а что-то более простое. В моем случае это был Firefox. До того, как я запустил программу, она уже занимала 1157 МБ.
Оказалось, что я смотрел 50-минутное видео понемногу в течение нескольких дней, и это все испортило. Это своего рода исправление, которое эксперты исправляют, даже не задумываясь о нем, но для таких, как я, стоит помнить о нем.
У меня сегодня был похожий случай в Google Chrome. Я крайне скептически отнесся к этому ответу . однако он показал, что мое исчерпание байтов исчезло после того, как я открыл окно в режиме инкогнито и снова запустил тот же сценарий! Исследования продолжаются.
Использование также yield может быть решением. См. Синтаксис генератора .
Вместо того, чтобы изменять PHP.ini файл для большего объема памяти, иногда реализация yield внутреннего цикла может решить проблему. Yield делает вместо того, чтобы выгружать все данные сразу, он читает их один за другим, экономя много памяти.
В моем случае на Mac (Catalina - Xampp) не было загруженного файла, поэтому мне пришлось сделать это в первую очередь.
Затем измените memory_limit = 512M
Затем перезапустите Apache и проверьте, загружен ли файл.
Запуск такого сценария (например, cron): php5 /pathToScript/info.php вызывает ту же ошибку.
Правильный способ: php5 -cli /pathToScript/info.php
Если вы используете VPS (виртуальный частный сервер) на базе WHM, вы можете обнаружить, что у вас нет прав на редактирование PHP.INI напрямую; система должна это делать. В панели управления хостом WHM перейдите в раздел Конфигурация службы → Редактор конфигурации PHP и измените memory_limit :
Я считаю, что это полезно при включении или требовании _dbconnection.php_ и _functions.php в файлах, которые фактически обрабатываются, а не при включении в заголовок. Что входит в себя.
Поэтому, если ваш верхний и нижний колонтитулы включены, просто включите все ваши функциональные файлы до включения верхнего колонтитула.
Уменьшая допустимый размер выделения в начале вашего кода, вы можете предотвратить фатальную ошибку, как описано в других ответах.
Тогда у вас может остаться программа, которая завершается, но ее все еще трудно отлаживать.
Независимо от того, завершается ваша программа или нет, настройте свой код, вставив BreakLoop() вызовы внутри вашей программы, чтобы получить контроль и выяснить, какой цикл или рекурсия в вашей программе вызывает проблему.
Определение BreakLoop следующее:
Сегодня после попытки залогиниться на сайт Joomla 1.5 наткнулся на ошибку "Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 11 bytes) in / var/ www / имя_пользователя /data / www / имя_домена.ru / libraries / joomla / database / database / mysql.php on line 462". Причем для анонимного доступа сайт работал нормально - если зайти браузером с другого IP-адреса.
Эта ошибка означает, что ваш скрипт PHP (а в контексте Joomla это или сама система или один из ее элементов) для выполнения требует памяти больше, чем разрешено в настройках PHP. Т.е. запрашиваемое значение превышает максимальное количество оперативной памяти предоставляемого пользовательскому аккаунту виртуальным хостингом. На разных хостингах это значение может отличаться. Чаще всего данная ошибка возникает в файле /includes/domit/xml_domit_parser.php при обработке xml-файлов (например при просмотре списка компонентов, модулей или мамботов. Если у вас возникает такая проблема, то можно сделать следующее:
1. Попробовать самостоятельно изменить это значение, добавив в самое начала index.php (расположенного в корне сайта) следующие строчки:
или же положив в корень сайта файл .htaccess следующего содержания:
Если же такой файл уже есть в корне сайта — просто добавьте в него приведенную выше строку.
2. Если это не помогло — обратитесь к администратору хостинга и попросите увеличить количество доступной памяти для PHP.
3. Для Joomla 1.5 существует плагин Memory Limit Plugin, который позволяет увеличить лимит без правки кода.
[Исправление ошибки]
Лично мне совет с правкой .htaccess не помог, помогло добавление кода в index.php:
Изменение вступит в силу немедленно, не потребуется ни перезагрузка сервера, ни демона Apache.
[php.ini]
Можно также изменить настройки php.ini [2]. Размещение этого файла зависит от типа Вашего хостинга. Если это выделенный сервер на RedHat или аналогичной системе Linux, то файл php.ini обычно находится в каталоге php-bin относительно домашнего каталога пользователя, от имени которого запускается сервер Apache, например в каталоге /var/www/apacheuser/data/php-bin. Для поиска файла php.ini можно воспользоваться командой find:
После того, как файл php.ini найден, можно в текстовом редакторе его изменить, и задать новый допустимый размер выделяемой памяти для скриптов PHP. В моем файле php.ini не была указана команда для задания лимита, и по умолчанию действовал лимит 128 мегабайт. Я изменил лимит на 200 мегабайт, добавив в php.ini команду:
/usr/sbin/apachectl restart
Изменение вступит в силу немедленно, не потребуется ни перезагрузка сервера, ни демона Apache. Для проверки текущего лимита PHP на выделение памяти можно воспользоваться командой phpinfo [3], добавленной в скрипт PHP.
Если запустить в браузере скрипт с добавленной командой phpinfo, то текущие параметры PHP отобразятся в виде таблицы. Строка с параметром memory_limit покажет текущее значение лимита памяти.
[Ссылки]
Постоянно
Вы можете навсегда изменить распределение памяти PHP двумя способами.
Если у вас есть доступ к вашему php.ini файлу, вы можете изменить значение memory_limit по своему желанию.
Если у вас нет доступа к вашему php.ini файлу (и ваш веб-хост позволяет это), вы можете переопределить выделение памяти через свой .htaccess файл. Добавьте php_value memory_limit 128M (или любое другое желаемое распределение).
Временный
Вы можете настроить распределение памяти на лету из PHP файла. У вас просто есть код ini_set('memory_limit', '128M'); (или любое другое ваше выделение). Вы можете удалить ограничение памяти (хотя ограничения на использование машины или экземпляра могут все еще применяться), установив значение в "-1".
Ответ 5
Очень легко получить утечки памяти в PHP script - особенно если вы используете абстракцию, такую как ORM. Попробуйте использовать Xdebug для профилирования вашего script и узнайте, куда пошла память.
Ответ 6
в верхней части файла. Сейчас все работает нормально. Я не знаю, есть ли у PHP утечка памяти. Это не моя работа, и мне все равно. Я просто должен сделать свою работу, и это сработало.
Программа очень проста:
Неустранимая ошибка указывает на строку 3, пока я не увеличил предел памяти, что устранило ошибку.
Ответ 7
Я продолжал получать эту ошибку, даже когда memory_limit установлен в php.ini , и значение правильно phpinfo() с помощью phpinfo() .
Изменяя это от этого:
Это исправило проблему в PHP 7.
Ответ 8
Когда вы видите вышеупомянутую ошибку, особенно если значение (tried to allocate __ bytes) является низким значением, это может быть индикатор бесконечного цикла, как функция, которая сама вызывает вызов:
Ответ 9
После включения этих двух строк он начал работать:
Ответ 10
Поменяйте память, как со 128 на 512, см. Ниже
Ответ 11
Корневой каталог вашего сайта:
Ответ 12
Для пользователей Drupal этот ответ Криса Лейна:
работает, но мы должны поставить его сразу после открытия
в файле index.php в корневом каталоге вашего сайта.
Ответ 13
В Drupal 7 вы можете изменить ограничение памяти в файле settings.php, который находится в папке sites/default. Вокруг строки 260 вы увидите это:
Даже если ваши настройки php.ini достаточно высоки, вы не сможете использовать более 128 МБ, если это не указано в файле Drupal settings.php.
Ответ 14
Вместо изменения значения memory_limit в вашем файле php.ini , если в вашем коде есть часть, которая может использовать много памяти, вы можете удалить memory_limit до memory_limit этого раздела, а затем заменить его после.
Ответ 15
Измените ограничение памяти в файле php.ini и перезапустите Apache. После перезагрузки запустите phpinfo(); функция из любого файла PHP для подтверждения изменения memory_limit .
Ограничение памяти -1 означает, что ограничение памяти не установлено. Это сейчас на максимуме.
Ответ 16
Некоторые хосты cPanel принимают этот метод только.
Ответ 17
Краш страница?
(Это происходит, когда MySQL должен запрашивать большие строки. По умолчанию для memory_limit установлено значение small, что было более безопасно для оборудования.)
Вы можете проверить состояние памяти вашей системы, прежде чем увеличивать php.ini :
Ответ 18
Для тех, кто ломает голову, чтобы понять, почему эта маленькая функция должна вызывать утечку памяти, иногда по маленькой ошибке, функция начинает рекурсивно вызывать себя навсегда.
Например, прокси-класс с тем же именем для функции объекта, который собирается его прокси.
Иногда вы можете забыть привезти этого маленького члена фактического Objec, и, поскольку прокси-сервер на самом деле имеет метод doSomething , PHP не даст вам никакой ошибки, а для большого класса его можно скрыть от глаз на пару минут, чтобы выяснить, почему это утечка памяти.
Ответ 19
У меня была ошибка ниже при работе с набором данных, меньшим, чем работал ранее.
Неустранимая ошибка: допустимый объем памяти 134217728 байт исчерпан (попытка выделить 4096 байт) в C:\workspace\image_management.php в строке 173
Поскольку поиск ошибки привел меня сюда, я подумал, что упомяну, что это не всегда технические решения в предыдущих ответах, но что-то более простое. В моем случае это был Firefox. До того, как я запустил программу, она уже использовала 1157 МБ.
Оказывается, я смотрел 50-минутное видео немного в течение нескольких дней, и это все испортило. Это исправление, которое эксперты исправляют, даже не задумываясь об этом, но для таких, как я, это стоит иметь в виду.
Ответ 20
Если вы используете виртуальный частный сервер с поддержкой WHM, вы можете обнаружить, что у вас нет прав для прямого редактирования PHP.INI; система должна это сделать. В панели управления хостом WHM перейдите к Конфигурация службы → Редактор конфигурации PHP и измените memory_limit :
Ответ 21
Я нахожу это полезным, если включить или требовать _dbconnection.php_ и _functions.php в файлы, которые фактически обрабатываются, а не включать в заголовок. Который входит в себя.
Так что, если ваш заголовок и нижний колонтитул включены, просто включите все ваши функциональные файлы, прежде чем заголовок включен.
Ответ 22
Запуск script, как это (пример cron, например): php5 /pathToScript/info.php создает ту же ошибку.
Правильный способ: php5 -cli /pathToScript/info.php
Ответ 23
Эта ошибка иногда вызывается ошибкой в коде PHP, которая вызывает рекурсии, включающие обработку исключений и, возможно, другие операции. К сожалению, я не смог создать крошечный пример.
Уменьшая допустимый размер выделения путем добавления
ближе к началу вашего кода вы сможете предотвратить фатальную ошибку.
Тогда вы можете остаться с программой, которая завершается, но все еще трудно отлаживать.
На этом этапе вставьте BreakLoop() внутри вашей программы, чтобы получить контроль и выяснить, какой цикл или рекурсия в вашей программе вызывают проблему.
Определение BreakLoop следующее:
Ответ 24
Ответ 25
В моем случае это была небольшая проблема с тем, как была написана функция. Утечка памяти может быть вызвана назначением нового значения входной переменной функции, например:
Ответ 26
Использование yield может быть решением. См. Синтаксис генератора.
Вместо того, чтобы PHP.ini файл PHP.ini для увеличения объема памяти, иногда использование yield внутри цикла может решить эту проблему. То, что делает yield - вместо того, чтобы выгружать все данные сразу, он читает их один за другим, экономя много памяти.
Ответ 27
Просто добавьте ini_set('memory_limit', '-1'); линия в верхней части вашей веб-страницы.
И вы можете установить свою память в соответствии с вашими потребностями вместо -1, до 16M и т.д.
Ответ 28
Очистите кеш браузера и попробуйте. ошибка может быть связана с тем, что браузер пытается загрузить большой файл или поврежденный файл на сервер.
Ответ 29
Когда я удалил следующие строки из моего кода, все работало хорошо!
Эти строки были включены в каждый файл, который я запускал. При запуске файлов один за другим все работало нормально, но при запуске всех файлов вместе у меня возникла проблема утечки памяти. Каким-то образом "include_once" не включает вещи один раз, или я делаю что-то не так.
У меня есть несколько систем точек продаж (POS), которые периодически отправляют новые данные о продажах в одну централизованную базу данных, которая хранит данные в одной большой базе данных для создания отчетов.
Клиентский POS основан на PHPPOS, и я реализовал модуль, который использует стандартную библиотеку XML-RPC для отправки данных о продажах в службу. Серверная система построена на CodeIgniter и использует библиотеки XML-RPC и XML-RPCS для компонента веб-сервиса. Всякий раз, когда я отправляю много данных о продажах (всего 50 строк из таблицы продаж и отдельные строки из sales_items, относящиеся к каждому элементу в рамках продажи), я получаю следующую ошибку:
Что касается шагов, которые я предпринял, я попытался отключить всю обработку на стороне сервера и настроил его так, чтобы он возвращал стандартный ответ независимо от ввода. Однако я считаю, что проблема заключается в фактической отправке данных. Я даже попытался отключить максимальное время выполнения скрипта для PHP, но он все еще не работает.
Немного запутался . где ошибка - в клиенте или на сервере? И на каком этапе . отправка клиента, получение сервера, обработка сервера, отправка сервера, получение клиента или обработка клиента?
Кажется, что ошибка возникает либо во время отправки клиентом, либо при получении сервером. Я попытался отключить всю серверную обработку и настроить ее для отправки стандартного ответа независимо от отправленных данных. Ошибка возникает, если я отправляю определенный объем данных. Я меняю настройку PHP.ini.
Изменение memory_limit В ini_set('memory_limit', '-1'); является не правильным решением. Пожалуйста, не делай этого.
В вашем PHP-коде может быть утечка памяти, и вы говорите серверу просто использовать всю память, которую он хочет. Вы бы вообще не устранили проблему. Если вы будете следить за своим сервером, вы увидите, что теперь он, вероятно, использует большую часть оперативной памяти и даже переключается на диск.
@Jeff, ты, наверное, прав в 95% случаев. Однако бывают случаи, когда вам действительно нужно больше памяти. Например, предположим, что ваше приложение загружает большой объем данных в память для обработки (скажем, спецификация материалов с 15 тыс. Компонентов). Не всегда в коде есть ошибки, иногда вам просто нужно немного больше памяти (например, 256 МБ вместо 128 МБ). Однако я согласен с тем, что устанавливать его на -1 ужасно плохо. Но регулировка предела памяти для разумных ситуаций во время выполнения совершенно приемлемо, imho.
@pyrite да, вы правы, что иногда процессу требуется больше памяти, но вы должны увеличить лимит памяти до некоторого логического количества, например 256 МБ, как вы сказали, или 512 МБ, почему бы и нет, НО не -1;)
@jeff Я полностью согласен, значение -1 может быть полезно только в среде разработки для целей тестирования.
@Pyrite в тех случаях, которые вы указали для оставшихся 5%, считывают данные фрагментами и используют воркера для их обработки вместо использования дополнительной памяти. Это решение также будет масштабироваться, в то время как ваше предложение не сработает, за исключением того, что вы продолжаете заполнять все больше и больше памяти на своем сервере с течением времени, если объем данных будет расти.
Чаще всего эта проблема в ORM, когда вы пытаетесь получить все данные, которые намного превышают предел памяти php. Например, когда вы пытаетесь создать ежемесячный отчет.
ini_set('memory_limit', '-1'); отменяет ограничение памяти PHP по умолчанию .
Жалко, что за это так много положительных голосов. Установка точного значения с помощью редактирования php.ini или ini_set - это совершенно правильное решение, когда людям нужно больше памяти. Установка неограниченного количества - опасный взлом :(
@ user1767586 затем установите для него разумное значение. Вы можете предотвратить выдачу ошибки скриптом, установив для него значение 1024M. Если в этом ответе указано ini_set ('memory_limit', '1024M'); Вы можете скопировать это и все будет в порядке. Устанавливая его на -1, вы настраиваете себя на сценарий, который потребляет всю память. Особенно, если вы делаете это регулярно. Заключение слова «опасно» в кавычки не делает его менее опасным. Вы действительно могли бы залить свой хост-сервер. Может начать уничтожать данные. Не знаю, может, работу потеряешь? Для меня это звучит довольно опасно. : |
Правильный способ - отредактировать php.ini файл. Отредактируйте memory_limit по своему желанию.
Судя по вашему вопросу, 128M (это предел по умолчанию) был превышен, поэтому с вашим кодом что-то серьезно не так, так как он не должен занимать так много времени.
Если вы знаете, почему это занимает так много времени, и хотите, чтобы оно было установлено memory_limit = 512M или выше, у вас должно быть все в порядке.
Честно говоря, если вы кешируете серьезные объемы данных, это правильный ответ. 128M недостаточно для некоторых скриптов. 512 Мбайт или 1024 Мбайт часто бывает достаточно, но вы должны решать индивидуально.
Да, но постарайтесь избегать огромного использования памяти, если количество пользователей будет больше.
@YumYumYum Это удаляет memory_limit, который вам нужен, только если вы контролируете использование памяти каким-либо другим способом. ОС убьет процесс, если в какой-то момент он потребует большой объем памяти.
Итак, если вы запускаете скрипт, который использует много памяти, но вам нужно запустить его только один раз, можете ли вы просто увеличить лимит памяти для процесса во время выполнения, а затем снова снизить лимит памяти после разового скрипт запускается?
Выделение памяти для PHP может быть изменено постоянно или временно.
ОТВЕТЫ
Ответ 1
Изменение memory_limit помощью ini_set('memory_limit', '-1'); это не правильное решение. Пожалуйста, не делай этого.
В вашем PHP-коде может быть утечка памяти, и вы говорите серверу просто использовать всю необходимую память. Вы бы не решили проблему вообще. Если вы проконтролируете свой сервер, вы увидите, что он теперь, вероятно, использует большую часть оперативной памяти и даже подключается к диску.
Ответ 2
ini_set('memory_limit', '-1'); отменяет установленный по умолчанию предел памяти PHP.
Ответ 3
Правильный способ - отредактировать файл php.ini . Измените memory_limit на ваше значение желания.
Как и в случае с вашим вопросом, предел 128M (который является лимитом по умолчанию) превышен, поэтому в вашем коде есть что-то серьезное, так как это не должно сильно занять.
Если вы знаете, почему это так много, и вы хотите разрешить ему устанавливать memory_limit = 512M или выше, и вам должно быть хорошо.
Ответ 4
Выделение памяти для PHP может быть отрегулировано постоянно или временно.
Читайте также: