php увеличить время работы скрипта

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

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

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

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

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

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

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

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

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

Источник

Проблемы «долгих» скриптов PHP

Внешний таймаут

В первую очередь нужно установить подходящее значение параметра max_execution_time в конфиге PHP.

Веб-сервер может также проксировать запросы на другой веб-сервер, который и запустит PHP скрипт (не редкий пример, nginx — фронтенд, apache — бэкэнд). В этом случае на проксирующем веб-сервере необходимо также настраивать таймаут проксирования. Для apache ProxyTimeout, для nginx proxy_read_timeout.

Прерывание пользователем

Если скрипт запускается в ответ на HTTP-запрос, то пользователь может остановить выполнение запроса в своем браузере, в этом случае прекратит свою работу и PHP скрипт. Если же требуется, чтобы скрипт продолжил свою работу даже после остановки запроса, установите в TRUE параметр ignore_user_abort в конфиге PHP.

Потеря открытых соединений

В таких случаях следует в первую очередь попробовать увеличить таймаут соединения. Например, для MySQL можно выполнить запрос (спасибо Snowly)

Параллельный запуск

В таких случаях можно использовать блокировку используемых ресурсов, но эта задача всегда решается индивидуально. Либо можно просто проверять, не запущена ли другая копия этого скрипта, и либо подождать завершения его работы, либо завершить текущий запуск. Для этого можно просматривать список запущенных процессов, либо использовать блокировку запуска самого скрипта, что то вроде:

Нагрузка на веб-сервер

В случаях, когда долгие скрипты запускаются через веб-сервер, соединение клиента с этим самым веб-сервером остается открытым до тех пор, пока не отработает скрипт. Это не есть хорошо, т.к. задача веб-сервера как можно быстрее обработать запрос и отдать результат. Если же соединение остается висеть, то один из воркеров (процессов) веб-сервера на долгое время будет занят. А если одновременно будет запущено достаточно много таких скриптов, то они могут занять все (ну или почти все) свободные воркеры (для apache см. MaxClients), и веб-сервер просто не сможет обрабатывать другие запросы.

Поэтому следует при обработке запроса пользователя, запускать скрипт в фоновом режиме через php-cli, чтобы не нагружать веб-сервер, а пользователю отвечать что его запрос обрабатывается. При необходимости можно периодически проверять состояние обработки при помощи AJAX запросов.

Вот, пожалуй, и все что я могу рассказать по этой теме. Надеюсь, для кого-то будет полезным.

Источник

Как увеличить время выполнения PHP-скрипта?

Если вы разрабатываете крупный проект, то на обработку некоторых данных ему может потребоваться большое количество времени. На разных хостингах стоят свои лимиты на такие действия, и если сюда вас привела необходимость увеличить это время – то я подробно расскажу, как это можно сделать.

Чтобы вы понимали, о чем идет речь, приведу небольшой пример. При выходе за выставленные рамки времени вы можете получить следующего рода ошибку:

Я расскажу о 4-х способах, как избавиться от нее.

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

Увеличение времени выполнения PHP-скрипта через конфигурационный файл php.ini

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

Для того чтобы точно узнать, где находится этот файл, прочитайте эту статью.

Открываете его удобным для вас способом и в самый низ вставляете:

Где «300» означает 300 секунд (меняете на свое). Этот файл, к сожалению, не на всех хостингах доступен пользователям для редактирования.

Увеличение времени выполнения PHP-скрипта через встроенную функцию «ini_set»

Второй способ основывается на использовании функции «ini_set». Ее вы вставляете непосредственно в сам файл скрипта, желательно в самый верх. Пример:

Здесь значение «300» вы также сменяете на нужное вам в секундах. Обратите внимание, что при использовании PHP в безопасном режиме эта функция будет недоступна.

Увеличение времени выполнения PHP-скрипта через встроенную функцию «set_time_limit»

Третий способ, наверное, один из самых популярных – использование функции «set_time_limit» для изменения времени выполнения скрипта. Также используется непосредственно в самом файле PHP. Пример:

Здесь «300» вы также изменяете на нужное вам значение. Вставлять код желательно в самом верху.

Последний вариант заключается в редактировании файла .htaccess, который находится в корне вашего сайта (если таковой отсутствует – создайте его).

В самый верх этого файла вставьте:

Значение «300» вы также меняете на свое.

Обратите внимание, что во всех случаях время выполнения скрипта указывается в секундах. Помимо этого, значение параметра во всех способах может принимать «0», что означает неограниченное время выполнения.

Как узнать, сколько времени отведено на выполнение PHP-скрипта?

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

Для этого создайте PHP-файл в корне вашего сайта, где выведите значение установленного времени:

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

Источник

Как настроить в PHP время выполнения скрипта – параметр max_execution_time

php увеличить время работы скрипта

Вступление

Получали ли вы когда-либо ошибку Fatal Error: Maximum execution time of 30 seconds exceeded в WordPress? Эта ошибка означает, что запущенному PHP-скрипту требуется больше времени для выполнения, чем установлено в ограничении, и по причине этого скрипт был остановлен. Это руководство поможет вам разобраться в вопросе, как увеличить в PHP время выполнения скрипта и тем самым решить возникшую ошибку.

Что понадобится

Перед началом руководства проверьте наличие:

Шаг 1 – Установка плагина WP Maximum Execution Time Exceeded

У WordPress огромное сообщество, поэтому для любой функциональности, которая вам понадобится, есть удобный плагин или даже несколько. Не исключение и наша ситуация, чтобы увеличить в PHP время выполнения скрипта, можно воспользоваться плагином WP Maximum Execution Time Exceeded и устранить возникшую ошибку. Подробную инструкцию о том, как установить плагин WordPress можно найти здесь.

php увеличить время работы скрипта

Это увеличит значение параметра max_execution_time и для PHP время выполнения скрипта до 60 секунд (1 минута). Если вы до сих пор получаете эту ошибку, то попробуйте увеличить его ещё больше – до 120/180 секунд и так далее.

Шаг 3 – Изменение значения max_execution_time в cPanel

Если вы используете cPanel, то вы можете повысить значение параметра max_execution_time напрямую через cPanel. Перейдите в раздел Select PHP Version (Выберите версию PHP).

Теперь нажмите на ссылку Switch To PHP Options (Настройки переключения версий PHP).

php увеличить время работы скрипта

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

php увеличить время работы скрипта

Вот и всё, вы успешно увеличили ограничение значение параметра max_execution_time для вашего сайта.

Заключение

Следуя этому руководству, вы изучили 3 пути увеличения max_execution_time для WordPress, чтобы изменить в PHP время выполнения скрипта и избавится от ошибки Fatal Error: Maximum execution time exceeded. Если вы пользуетесь общим хостингом и не одно из решений вам не подошло, тогда обратитесь к своему провайдеру хостинга, чтобы проверить какие на самом деле у вас ограничения и возможно ли их изменение вообще.

Елена имеет профессиональное техническое образование в области информационных технологий и опыт программирования на разных языках под разные платформы и системы. Более 10 лет посвятила сфере веб, работая с разными CMS, такими как: Drupal, Joomla, Magento и конечно же наиболее популярной в наши дни системой управления контентом – WordPress. Её статьи всегда технически выверены и точны, будь то обзор для WordPress или инструкции по настройке вашего VPS сервера.

Источник

Изменяем лимит «max_execution_time» в PHP конфигурации на Open Server.

php увеличить время работы скрипта

При обновлении OpenCart 3.0.3.2 до версии 3.0.3.7 на Open Server, получил ошибку при попытке выполнить обновление:

Fatal error: Maximum execution time of 60 seconds exceeded

Данная ошибка означает, что выполнение определенной операции, привело к превышению временного лимита, указанного в конфигурации PHP. Вы можете изменить значение этого параметра, который указывается в секундах. По умолчанию в Open Server выставлен лимит в 60 секунд, для параметра «max_execution_time» в настройках PHP. Зачастую, выполнение скрипта не превышает 30 сек и данного лимита в 60 секунд, должно вполне хватать.

Если данная ошибка, возникает у вас на хостинге, настоятельно рекомендую обратиться к вашему хостинг-провайдеру для решения данной проблемы. На некоторых виртуальных хостингах (shared-хостинг), может стоять лимит на 30 секунд и нет возможности изменить его через админку.

Если у вас возникает ошибка «Fatal error: Maximum execution time of 60 seconds exceeded» при работе с Open Server, необходимо изменить время для выполнения скрипта в конфигурации PHP. Рассмотрим два способа, как это сделать.

На заметку.
Не пытайтесь вносить правки в файл конфигурации PHP по пути: «C:\OpenServer\modules\php\PHP-ваша_версия». Файл «php.ini» находящийся по данному пути, является временным и его бесполезно править. При перезапуске Open Server, файл перезаписывается с настройками по умолчанию. Ниже, описаны рабочие способы, которые помогут произвести нужные манипуляции с параметрами PHP.

Способ 1.

Увеличить лимит времени «max_execution_time», через интерфейс Open Server.

Открываем системный трей (1.) и щелкаем правой кнопкой мыши по флажку (2.) Open Server. Переходим по пути:

php увеличить время работы скрипта

Обратите внимание, что у вас, может отличатся версия PHP, в зависимости от того, какую версию вы выбрали. В моем примере, это PHP 7.3.

В открывшемся окне

php увеличить время работы скрипта

php увеличить время работы скрипта

В открывшемся поле поиска (1.), вставляем «max_execution_time» (без кавычек) и получаем результат (2.):

php увеличить время работы скрипта

Теперь, меняем лимит «60», на «6000» к примеру. Или, на любой другой показатель. В своем примере, изменю лимит «max_execution_time» на «6000»:

php увеличить время работы скрипта

php увеличить время работы скрипта

Закрываем окно и перезапускаем сервер Open Server. Для этого, открываем системный трей (1.) и щелкаем по флажку (2.) правой кнопкой мыши, выбираем «Перезапустить» (3.):

php увеличить время работы скрипта

После этого, все должно работать.

Стабильный и доступный виртуальный хостинг и VPS для сайтов любой любой сложности и нагруженности. Защита от DDoS и качественное администрирование. Хостинг-провайдер для тех, кто ценит стабильность и безопасность.

Способ 2.

Увеличить лимит времени «max_execution_time», через сторонний редактор кода в Open Server.

В папке config, необходимо найти файл « PHP_ваша_версия_php.ini ».

В моем примере, выберу файл « PHP_7.3_php.ini » :

php увеличить время работы скрипта

Чтобы открыть файл и раскомментировать « ionCube » в конфигурации PHP, используйте Notepad++ или любой другой редактор.

Открываем файл « PHP_ваша_версия_php.ini » и ищем

В своем примере, воспользуюсь редактором Visual Studio Code и открою в нем файл « PHP_7.3_php.ini » :

php увеличить время работы скрипта

php увеличить время работы скрипта

php увеличить время работы скрипта

php увеличить время работы скрипта

php увеличить время работы скрипта

Таким образом, мы изменили с вами лимит «max_execution_time».

После этого, все должно работать.

Надеюсь, данная заметка, будет вам полезной. Успехов.

Источник

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

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