Php memory limit console

Как увеличить память и время для 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, где расчитывается абсолютное время выполнения.

Читайте также:  Парсинг auto ru python

Обе 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

;max_input_nesting_level = 64

задаёт максимальную глубину вложенности входных переменных (то есть $_GET, $_POST.). По умолчанию данная директива закомментирована.

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

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

определяет, входных переменных может быть принято в одном запросе (ограничение накладывается на каждую из глобальных переменных $_GET, $_POST и $_COOKIE отдельно). Использование этой директивы снижает вероятность сбоев в случае атак с использованием хеш-коллизий. Если входных переменных больше, чем задано директивой, выбрасывается предупреждение E_WARNING, а все последующие переменные в запросе игнорируются. По умолчанию данная директива закомментирована.

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

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

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

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

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

'; echo 'Количество операций приема блока: ' . $dat["ru_inblock"] . '
'; echo 'Количество отправленных сообщений IPC: ' . $dat["ru_msgsnd"] . '
'; echo 'Количество принятых сообщений IPC: ' . $dat["ru_msgrcv"] . '
'; echo 'Наибольший размер установленной резидентной памяти: ' . $dat["ru_maxrss"] . '
'; echo 'Суммарное значение размера разделяемой памяти: ' . $dat["ru_ixrss"] . '
'; echo 'Суммарное значение размера неразделяемых данных: ' . $dat["ru_idrss"] . '
'; echo 'Количество исправленных страниц (легкая ошибка страницы): ' . $dat["ru_minflt"] . '
'; echo 'Количество ошибочных страниц (тяжелая ошибка страницы): ' . $dat["ru_majflt"] . '
'; echo 'Количество полученных сигналов: ' . $dat["ru_nsignals"] . '
'; echo 'Количество согласованных переключений контекста: ' . $dat["ru_nvcsw"] . '
'; echo 'Количество несогласованных переключений контекста: ' . $dat["ru_nivcsw"] . '
'; echo 'Количество свопов: ' . $dat["ru_nswap"] . '
'; echo 'Время на задачи пользователя (user time) (микросекунды): ' . $dat["ru_utime.tv_usec"] . '
'; echo 'Время на задачи пользователя (user time) (секунды): ' . $dat["ru_utime.tv_sec"] . '
'; echo 'Время на системные задачи (system time) (микросекунды): ' . $dat["ru_stime.tv_usec"] . '
';

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

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

Читайте также:  Lua run python script

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

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

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

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

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

Замечание: PHP разрешает сокращения значений байт, включая K (кило), M (мега) и G (гига). PHP автоматически преобразует все эти сокращения. Будьте осторожны с превышением диапазона 32-битных целых значений (если вы используете 32-битную версию), так как это приведёт к ошибке вашего скрипта.

Для полного снятия лимитов значение можно установить на 0.

Значение этой настройки игнорируется, если чтение данных POST отключено с помощью enable_post_data_reading.

Увеличение количества файлов, выгружаемых на сайт за один раз

устанавливает максимально разрешённое количество одновременно закачиваемых файлов. Начиная с PHP 5.3.4, пустые поля загрузки не рассматриваются этим ограничением.

Имеются ввиду не общее количество одновременно закачиваемых файлов, которые могут выполнять различные пользователи, а именно количество файлов за один запрос.

Связанные статьи:

Источник

3 ways to get PHP memory limit value

PHP101.net - Get PHP memory limit value

Knowing what PHP memory limit value is will help in configuring and optimize for your PHP scripts to run efficiently. This article will guide you on how to quickly get PHP memory limit configuration value, and more in-depth guides on how the methods work.

Quick solutions

php -r "echo ini_get('memory_limit');"

In this case, the PHP memory limit value is 512 MB. 2. By phpinfo : Create a new PHP file with this line:

Save the file, open it on the browser, and look for memory_limit , which will show the current setting value. Above are quick solutions for getting the setting value of PHP memory limit. To know more details on PHP memory limit, and the processes to get its value, you can continue with the article within the below sections.

Читайте также:  Css отступы блоков друг от друга

What is PHP memory limit and why is it necessary?

A PHP script needs memory assigned to it for it to be running properly. As in PHP.net, it is the maximum amount of memory in bytes that a script is allowed to allocate. This helps poorly written PHP scripts won’t consume too much server memory, as well as malicious PHP scripts that always eat up the server bandwidth. Too low memory limit setting value can cause issues on the PHP scripts needing fair memory allocated for it to run properly. In general, 256MB ( 256M in PHP memory_limit syntax) is more than enough for most PHP scripts to run properly.

How to get PHP memory limit configuration value

There are multiple ways to get PHP memory limit value, here we will introduce the most common methods along with explanation on how they work.

1. Using PHP-CLI (PHP Command Line Interface)

1.A. Using SSH terminal (in Linux based operating systems) or Windows command line, we can use this command to get the PHP memory limit value and print it to the terminal:

php -r "echo ini_get('memory_limit');"
  • php is the required command to execute a PHP command in terminal
  • -r is required for running commands without the script tags ( ), as defined in PHP.net Command line options
  • echo ini_get(‘memory_limit’); (whole command in bracket) is the command to print ( echo ) the value of ini_get(‘memory_limit’); , in which ini_get is the function to get PHP configuration value.

The result will simply display the configuration value, here is 512M, which is 512 MB in PHP configuration syntax:

1.B. Using SSH terminal in Linux based operating systems only, type this command:

  • -i is for getting PHP configuration values
  • grep command for only getting the memory_limit value, not every PHP configuration values.
[[email protected] ~]# php -i | grep "memory_limit" memory_limit => 512M => 512M

This will show two values for PHP memory limit configuration, which the first one is the local value set in the current web directory , the second one is the master value defined in php.ini (system-wide) .

2. Using phpinfo function

We can create a php file with the phpinfo() function to get the memory limit setting:

Open the file on browser, and look for memory_limit value will show the setting we need:

PHP101.net - Get PHP memory limit value

Editing PHP memory limit setting

When you can get PHP memory limit value, the next step is adjust it properly.

We have a detailed article on how to edit PHP memory limit configuration values:

You might also like

References

Источник

Оцените статью