php max memory limit

Как увеличить память и время для PHP скриптов

Настройки потребления ресурсов в PHP скриптах можно установить в главном конфигурационном файле php.ini, а также в самих скриптах.

В файле php.ini за это отвечают директивы из раздела Resource Limits (ограничение потребления ресурсов).

Как увеличить память для PHP скриптов

Для этого в файле php.ini найдите и отредактируйте директиву:

Эта директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, парсер завершает работу скрипта. Этот механизм помогает предотвратить зависание сервера из-за плохо написанного скрипта. По умолчанию на загрузку даётся 30 секунд. Если PHP запущен из командной строки, это значение по умолчанию равно 0.

На максимальное время выполнения не влияют системные вызовы, потоковые операции и т.п.

При работе в безопасном режиме эту настройку нельзя изменить функцией ini_set(). Если значение все же нужно изменить, надо либо выключить безопасный режим, либо изменить значение прямо в php.ini.

Веб-серверы обычно имеют свои настройки тайм-аута, по истечении которого сами завершают выполнение скрипта PHP. В Apache есть директива Timeout, в IIS есть функция CGI timeout. В обоих случаях по умолчанию установлено 300 секунд. Точные значения можно узнать из документации к веб-серверу.

Функция для увеличения и ограничения времени выполнения PHP

Функция set_time_limit ограничивает время выполнения скрипта.

Она задает время в секундах, в течение которого скрипт должен завершить работу. Если скрипт не успевает, вызывается фатальная ошибка. По умолчанию дается 30 секунд, либо время, записанное в настройке max_execution_time в php.ini (если такая настройка установлена).

При вызове set_time_limit() перезапускает счетчик с нуля. Другими словами, если тайм-аут изначально был 30 секунд, и через 25 секунд после запуска скрипта будет вызвана функция set_time_limit(20), то скрипт будет работать максимум 45 секунд.

Возвращаемые значения: возвращает TRUE в случае успеха, иначе FALSE.

Внимание: эта функция не работает, если PHP работает в безопасном режиме. Обойти это ограничение можно только выключив безопасный режим или изменив значение настройки в php.ini.

Замечание: функция set_time_limit() и директива max_execution_time влияют на время выполнения только самого скрипта. Время, затраченное на различные действия вне скрипта, такие как системные вызовы функции system(), потоковые операции, запросы к базам данных и т.п. не включаются в расчет времени выполнения скрипта. Это не относится к системам Windows, где расчитывается абсолютное время выполнения.

Обе set_time_limit(…) и ini_set(‘max_execution_time’,…); не учитывают время, потраченное функциями sleep, file_get_contents, shell_exec, mysql_query и некоторыми другими.

Увеличение выделенной памяти для PHP скриптов

Директива в файле php.ini

задаёт максимальный объем памяти в байтах, который разрешается использовать скрипту. Это помогает предотвратить ситуацию, при которой плохо написанный скрипт съедает всю доступную память сервера. Для того, чтобы убрать ограничения, установите значение этой директивы в -1.

В версиях до PHP 5.2.1 для использования этой директивы, она должна была быть указана на этапе компиляции. Так, ваша строка конфигурации должна была включать: —enable-memory-limit. Эта опция компиляции была также необходима для использования функций memory_get_usage() и memory_get_peak_usage() до версии 5.2.1.

Если используется целое число, то значение измеряется байтами. Вы также можете использовать сокращённую запись.

Доступные опции: K (для килобайт), M (для мегабайт) и G (для гигабайт; доступна начиная с PHP 5.1.0); они регистронезависимы. Все остальное считается байтами. 1M равно одному мегабайту или 1048576 байтам. 1K равно одному килобайту или 1024 байтам. Эти сокращения вы можете использовать в php.ini и в функции ini_set(). Обратите внимание, что числовое значение приводится к типу integer; например, 0.5M интерпретируется как 0.

Увеличение времени парсинга данных из запроса.

Директива в файле php.ini

задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные данные, переданные запросами вроде POST или GET. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться. Значение по умолчанию -1, что означает, что будет использоваться max_execution_time. Если установить равным 0, то ограничений по времени не будет.

При запуске в командной строке значение директивы установлено на -1 (неограниченно).

Увеличение глубины вложенности входных переменных

Директива в файле php.ini

Ограничение на количество входных переменных

Директива в файле php.ini

Внимание: после внесения изменений в файл php.ini необходимо перезагрузить веб-сервер, чтобы изменения вступили в силу.

Проверка использование ресурсов

Функция getrusage получает информацию об использовании текущего ресурса.

Возвращаемые значения: возвращает ассоциативный массив, содержащий данные возвращённые из системного вызова. Имена элементов соответствуют документированным именам полей.

Пример использования getrusage():

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

Увеличение разрешённого размера файлов для загрузки на сервер

Кроме описанных ограничений на потребление непосредственных ресурсов веб-сервера, также имеются ограничения, которые оказывают косвенное воздействие на ресурсы: например, загрузка слишком большого файла на сервер может потребовать большого количества ресурсов для его обработки, либо привести к переполнению дискового хранилища сервера. Поэтому существуют дополнительные лимиты, включённые в другие разделы конфигурационного файла помимо Resource Limits.

В частности, директива

устанавливает максимальный размер закачиваемого файла.

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

Максимально допустимый размер данных, отправляемых методом POST

Методом пост могут отправляться как текстовые данные (например, при отправке комментария на сайт), так и файлы. Если вы увеличили значение upload_max_filesize чтобы иметь возможность загружать файлы большего размера на сайт, то также нужно увеличить и значение директивы:

которая устанавливает максимально допустимый размер данных, отправляемых методом POST. Это значение также влияет на загрузку файлов. Для загрузки больших файлов это значение должно быть больше значения директивы upload_max_filesize. В сущности, memory_limit должна быть больше чем post_max_size. Если используется integer, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана выше. Если размер POST-данных больше чем post_max_size, суперглобальные переменные $_POST и $_FILES будут пустыми. Это можно отследить различными способами, например передав $_GET переменную в скрипт, обрабатывающий данные, т.е.

Источник

php memory limit или как увеличить лимиты на размер загружаемых файлов и объем выделяемой памяти

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

Если достигнут предел выделяемой памяти, то выведется другое сообщение об ошибке:

Обновление файла php.ini

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

M — означает мегабайты. Измените лимиты 1000M, 2000M и 3000M на значения, которые необходимы. Изменение значения max_execution_time ограничит время загрузки скрипта.

Во многих случаях используемые значения должны увеличиваться по мере перехода в списке от первой до третьей строки. Upload_max_filesize должен быть самым маленьким, memory limit php ini — самым большим. При этом post_max_size должен иметь среднее значение.

Прежде чем проверить, не исчезла ли ошибка, очистите кэш браузера.

Измените значения php ini set memory limit так, как вам нужно. Не забудьте сохранить файл и очистить кэш браузера.

Изменение файла wp-config.php

Сохраните файл и очистите кэш браузера.

Изменение лимитов в WHM

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

Введите нужные вам значения и нажмите кнопку « Сохранить ».

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

Нажмите кнопку « Сохранить » и очистите кэш браузера.

Заключение

Если ни один из вариантов не дал результата, свяжитесь со своим хостинг-провайдером.

Пожалуйста, опубликуйте ваши комментарии по текущей теме статьи. За комментарии, подписки, дизлайки, отклики, лайки огромное вам спасибо!

Источник

PHP memory limit — что это и как его увеличить?

Продолжаем рубрику «Учимся вместе», и в этой статье я расскажу — что такое PHP Memory Limit и как увеличить на своем вебсайте самостоятельно. Существует всего три способа о которых и пойдет речь в сегодняшнем материале.

PHP Memory Limit — это

Максимальный лимит памяти PHP (не путать с оперативной памятью RAM), которая выделяется на выполнение скриптов и сценариев на сайте. Обычно, PHP Mermory Limit настроен по умолчанию и его не нужно трогать, но бывают сайты со сложными и габаритными скриптами (например, онлайн-конструкторы страниц — Elementor, Divi или плагин интернет-магазина WooCommerce), а лимит на сервере, к примеру, занижен. Тогда и нужно поднимать планку, потому что скрипты просто не впишутся в лимит и задачи не выполнятся.

Пример ошибки превышения лимита памяти PHP:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes)

Одна из причин, по которой ограничивается количество PHP памяти — чтобы не дать одному сайту использовать все ресурсы сервера и замедлить другие сайты на этом сервере. Поэтому, не стоит устанавливать этот параметр слишком большим.

PHP Memory Limit не панацея! Увеличивайте только в крайних случаях.

Прежде, чем я поделюсь с вами тремя способами как это сделать, дам еще немного фактов:

Как увеличить PHP Memory Limit

Редактирование файла PHP.INI

Первое, что нужно сделать — узнать где у вас на хостинге лежит php.ini. Нужно выполнить не сложную манипуляцию:

На Linux-серверах, php.ini обычно находится на /usr/local/php/etc/.

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

Но, чтобы его изменить, нужно выставить сначала права доступа 644, по умолчанию у него 400:

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

Редактирование WP-CONFIG.PHP

Этот метод подойдет всем у кого сайт на WordPress. Файл находится в корневой директории /.

Откройте его, например, через FTP-клиент:

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

Найдите строку define(‘WP_MEMORY_LIMIT’, ’64M’); и просто измените значение:

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

Сохраните файл и очистите кэш. Изменения вступят в силу.

Аналогично находит в корневой директории, открываем и добавляем строку с нужным значением PHP лимита:

php_value memory_limit 256M

Сохраняем, делаем очистку кеша и изменения должны вступить в силу.

В зависимости, от конфигурации вашего веб-сервера, какой-то метод может работать, какой-то нет.

Кто боится изменять PHP Memory Limit ручками, предлагаю специальные плагины для WordPress.

Источник

ini_set(«memory_limit») in PHP 5.3.3 is not working at all

I had this working before :

That would input this :

on a php script executed by command line. I updated from 5.2 to 5.3, and from now, this directive is not working at all : this gives me :

and then make my script fail with a fatal Error.

I checked the php documentation, and googled it, and I didn’t find anywhere that «memory_limit» had been deprecated.

Does anyone have a solution?

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

php max memory limit. Смотреть фото php max memory limit. Смотреть картинку php max memory limit. Картинка про php max memory limit. Фото php max memory limit

6 Answers 6

If you have the suhosin extension enabled, it can prevent scripts from setting the memory limit beyond what it started with or some defined cap.

Most likely your sushosin updated, which changed the default of suhosin.memory_limit from disabled to 0 (which won’t allow any updates to memory_limit).

On Debian, change /etc/php5/conf.d/suhosin.ini

Or whichever value you are comfortable with. You can find the changelog of Sushosin at http://www.hardened-php.net/hphp/changelog.html, which says:

Changed the way the memory_limit protection is implemented

Here’s a list of things that are worth checking:

Is Suhosin installed?

ini_set

When an integer is used, the value is measured in bytes. Shorthand notation, as described in this FAQ, may also be used.

Источник

How to set a higher memory_limit, post_max_size, and for a specific script in Apache/PHP?

I have a web app that redirects all requests to the virtual host to a controller, which then decides which files to include and run based on the URL. There is a web service that accepts large XML files through POST. I need the memory_limit and post_max_ to be

32M for the app, except for service that accepts the XML, which will need their limits to be closer to 1024M. ini_set(‘memory_limit’,’1024M’) works within the script, but won’t work for the post_max_size.

I can’t seem to figure out how to do it. I was trying something similar to this:

So, with the above config, if Controller.php looks like

I’ll receive string(3) «32M» string(3) «30M» string(3) «29M»

if I visit http://test.com, and http://test.com/services/big-service, but I’d like to see the higher limits for the later URLs.

Does anybody have any solutions to this that don’t resort to using and accessing the service script directly through the URL?

5 Answers 5

The problem is mod_rewrite is causing it to always go to /Controller.php, so the Location block with the services is never used. Using additional mod_rewrite rules

And then having ControllerBig be a clone of Controller

Edit: Full VirtualHost block:

The best bet in this case is to set the larger limits in php.ini, and then use ini_set() directives in your scripts to bring that limit down. If that’s unacceptable, then the best you could do is set only post_max_size to the larger limit, and then set each of your other limits individually within your script.

The problem is that by the time PHP starts executing your script, it has already read its post_max_size from php.ini, and the data has already been POSTed to your server, so if this limit has been exceeded, your script won’t even be executed.

AFAIK php.ini is one per php instance (php5_module), you may work around your problem by running several of them.

as php5_module is one per apache, one solutions would be to run another Apache instance. Problem is that it can not run in same port 80

Not sure how crash-proof this setup is however, heh

You could set up a new Name based virtualhost (so with another DNS) handling the same configuration, with some changes on the memory limit.

This means your application urls for /services/big-service should always use this different DNS (and your application should check theses services are always taken from the right url.

The php_value settings can be set by VirtualHost, so it should work. If you check this table you’ll see that memory_limit is not in PERDIR scope, so you cannot set it only for a Directory, only the complete VirtualHost. With a PERDIR scope a may have been able to catch the thing instead of (but anyway you may have a mod_rewrite to the main index.php file, so it’s always the same Directory).

With the 2 DNS solution you still have one big problem, you may get some of your apache process consuming 1024M of RAM, and they will later be used for more simple requests, but still take this RAM. So you would have to clean-up often your apache children (MaxRequestPerChild to 100 for example).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *