Функции языка для измерения время выполнения скрипта PHP. Как настроить в PHP время выполнения скрипта – параметр max_execution_time Увеличить время выполнения скрипта php ipb
От автора: сын моего знакомого настолько увлекся химией, что начал дома проводить различные «испытания». После того, как их «жертвой» стала люстра на кухне, отец попросил его изменить свои пристрастия. В результате ребенок увлекся статистикой, и решил вычислить среднее время горения одной спички. Следствием чего чуть не стало возгорание всей квартиры. Я посоветовал «горе-ученому» заняться программированием, и установить время выполнения скрипта PHP.
Зачем измерения в программировании
Прежде всего, это безопаснее, чем химия и статистика . А на самом деле время выполнения программного кода является важным параметром, который влияет на работоспособность всего ресурса и отдельных его модулей. Этот параметр больше востребован при оптимизации и тестировании .
Немного пофантазируем. Представим, что есть какой-то «самописный» движок, который разработчик «залил» на хороший хостинг и запустил (на его основе) свой сайт. Но почему-то загрузка ресурса на стороне пользователя происходит очень медленно.
В такой ситуации первоначально все шишки «посыплются» на хостера. Скорее всего, разгневанный программист обратится с жалобой в службу поддержки хостинга. Мол, не выполняются условия договора, сайт еле «живой»…
Но на самом деле проблема медленной загрузки страниц динамического ресурса может скрываться в самом движке. И чтобы не выглядеть потом «чайником», опытный разработчик всегда перед сдачей проекта измеряет время исполнения скрипта PHP.
Возможности PHP
Я всегда называл одним из самых удобных языков программирования. Чтобы отследить время работы кода, разработчику не требуется писать длинные «талмуды» для перехвата каждой строки скрипта. В данной технологии реализовано несколько специализированных средств. Главным из них является функция microtime(). Она возвращает время (в миллисекундах), прошедшее с начала 1970 г. Так называемое «начало эпохи Unix». Если передать функции параметр get_as_float со значением true, то она будет возвращать временной промежуток в виде целых секунд и дробных миллисекунд.
Принцип использования microtime() заключается в следующем: функцию вызывают в начале скрипта и в его конце. Затем из последнего значения вычитают начальное. Вот как посчитать время выполнения скрипт:
"; $last=microtime(true); $value=$last-$first; echo "Скрипт выполняется за: ".$value; ?>
Изменяем время работы кода
В PHP значение время работы скрипта можно ограничивать программным путем (уменьшать или увеличивать). Для этого используются несколько функций, каждая из которых переписывает параметр, установленный в файле конфигурации (php.ini).
Для начала модифицируем наш код и увеличим количество итераций цикла в 20 раз до 200 миллионов. Если все нормально, то после запуска скрипта вы должны получить сообщение о фатальной ошибке .
Это значит, что в настройках параметру max_execution_time задано значение по умолчанию (30 секунд). Увеличим максимальное время выполнения скрипта на PHP в 3 раза.
set_time_limit (90 ) ; |
Теперь мы не получаем сообщения об ошибке.
Если у вас есть большой проэкт или сервер с ограниченными ресурсами, то Вы будете часто видеть «504 Gateway Time-out» ошибку.
Вы можете выполнить приведенные ниже шаги, чтобы увеличить значение тайм-аута. В PHP по умолчанию 30 секунд.
Изменения в php.ini
Если вы хотите изменить максимальное время выполнения для PHP скриптов из 30 секунд (по умолчанию) до 300 секунд.
Nano /etc/php5/fpm/php.ini
Установите…
Max_execution_time = 300
В Apache PHP работает как модуль, этих изменений будет достаточно. Но в нашем случае мы должны сделать изменения еще в нескольких местах.
Изменения в PHP-FPM
Это нужно, если Вы раскоментировали параметр request_terminate_timeout ранее. По умолчанию он закоментирован и берет значение max_execution_time found из php.ini
Открываем…
Nano /etc/php5/fpm/pool.d/www.conf
Устанавливаем…
Request_terminate_timeout = 300
Изменения в Nginx Config
Увеличение time limit-а для одного домена example.com
Nano /etc/nginx/sites-available/example.com location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_read_timeout 300; }
Если Вы хотите увеличить time-limit для всех доменов на вашем сервере, Вы можете отредактировать главный конфигурационный файл nginx.conf:
Nano /etc/nginx/nginx.conf
Добавить следующий параметр в http{..} секцию
Http { #... fastcgi_read_timeout 300; #... }
Если вы разрабатываете крупный проект, то на обработку некоторых данных ему может потребоваться большое количество времени. На разных хостингах стоят свои лимиты на такие действия, и если сюда вас привела необходимость увеличить это время – то я подробно расскажу, как это можно сделать.
Чтобы вы понимали, о чем идет речь, приведу небольшой пример. При выходе за выставленные рамки времени вы можете получить следующего рода ошибку:
Fatal error: Maximum execution time of 30 seconds exceeded in сайт.php on line 19
Я расскажу о 4-х способах, как избавиться от нее.
Но стоить начать с того, что в каждом отдельном случае все перечисленные способы могут не работать, так как некоторые хостинг-провайдеры запрещают самим изменять этот параметр.
Увеличение времени выполнения PHP-скрипта через конфигурационный файл php.ini
В качестве первого способа для увеличения времени выполнения скрипта мы будем использовать файл конфигурации php.ini .
Для того чтобы точно узнать, где находится этот файл, прочитайте .
Открываете его удобным для вас способом и в самый низ вставляете:
Max_execution_time = 300;
Где «300 » означает 300 секунд (меняете на свое). Этот файл, к сожалению, не на всех хостингах доступен пользователям для редактирования.
Увеличение времени выполнения PHP-скрипта через встроенную функцию «ini_set»
Второй способ основывается на использовании функции «ini_set ». Ее вы вставляете непосредственно в сам файл скрипта, желательно в самый верх. Пример:
Здесь значение «300 » вы также сменяете на нужное вам в секундах. Обратите внимание , что при использовании PHP в безопасном режиме эта функция будет недоступна.
Увеличение времени выполнения PHP-скрипта через встроенную функцию «set_time_limit»
Третий способ, наверное, один из самых популярных – использование функции «set_time_limit » для изменения времени выполнения скрипта. Также используется непосредственно в самом файле PHP. Пример:
Здесь «300 » вы также изменяете на нужное вам значение. Вставлять код желательно в самом верху.
Увеличение времени выполнения PHP-скрипта через файл.htaccess
Последний вариант заключается в редактировании файла .htaccess , который находится в корне вашего сайта (если таковой отсутствует – создайте его).
В самый верх этого файла вставьте:
Php_value max_execution_time 300
Значение «300 » вы также меняете на свое.
Обратите внимание , что во всех случаях время выполнения скрипта указывается в секундах. Помимо этого, значение параметра во всех способах может принимать «0 », что означает неограниченное время выполнения.
Как узнать, сколько времени отведено на выполнение PHP-скрипта?
После того, как одним из способов вы попытались изменить время выполнения скрипта, нужно узнать, действительно ли у вас это получилось.
Для этого создайте PHP-файл в корне вашего сайта, где выведите значение установленного времени:
Если время равняется тому, что вы указали – поздравляем вас, вы достигли желаемой цели. В противном же случае прочитайте статью еще раз, напишите в комментариях о вашей проблеме или направьте ее вашему хостинг-провайдеру.
Получали ли вы когда-либо ошибку Fatal Error: Maximum execution time of 30 seconds exceeded в WordPress? Эта ошибка означает, что запущенному PHP-скрипту требуется больше времени для выполнения, чем установлено в ограничении, и по причине этого скрипт был остановлен. Это руководство поможет вам разобраться в вопросе, как увеличить в PHP время выполнения скрипта и тем самым решить возникшую ошибку.
Перед началом руководства проверьте наличие:
- Доступа к Административной консоли вашего WordPress сайта (англ.)
Шаг 1 – Установка плагина WP Maximum Execution Time Exceeded
У WordPress огромное сообщество, поэтому для любой функциональности, которая вам понадобится, есть удобный плагин или даже несколько. Не исключение и наша ситуация, чтобы увеличить в PHP время выполнения скрипта, можно воспользоваться плагином WP Maximum Execution Time Exceeded и устранить возникшую ошибку. Подробную инструкцию о том, как установить плагин WordPress можно найти .
Этот плагин вносит изменения в файл.htaccess и увеличивает ограничения по времени выполнения скрипта. После установления плагина вам больше ничего не нужно делать, всё уже сделано плагином. Страницы настройки у плагина нет, поэтому, если вы захотите вернуть обратно прежние настройки, просто удалите плагин и.htaccess будет возвращён к изначальному виду.
Шаг 2 – Редактирование файла.htaccess вручную
Если у вас уже и так много установленных плагинов и вы не хотите использовать дополнительный или это просто не помогло вам избавится от ошибки, тогда вы можете внести изменения в файл.htaccess руками для увеличения ограничения максимального времени выполнения. Самый простой способ воспользоваться Файловым менеджером , расположенным в вашей панели управления. Если вы не знаете, как найти файл.htaccess , обратитесь к подробной инструкции . Вам нужно будет ввести следующий код в файл.htaccess внизу и сохранить его, нажав Save :
Php_value max_execution_time 60
Это увеличит значение параметра max_execution_time и для PHP время выполнения скрипта до 60 секунд (1 минута). Если вы до сих пор получаете эту ошибку, то попробуйте увеличить его ещё больше – до 120/180 секунд и так далее.
Шаг 3 – Изменение значения max_execution_time в cPanel
Если вы используете cPanel, то вы можете повысить значение параметра max_execution_time напрямую через cPanel. Перейдите в раздел Select PHP Version (Выберите версию PHP ).
Увеличьте значение, которое вы видите в строке max_execution_time . Обычно, оно установлено в 30 секунд по умолчанию, в нашем примере мы его увеличили до 60 секунд. Нажмите Apply (Применить) для сохранения изменений.
Вот и всё, вы успешно увеличили ограничение значение параметра max_execution_time для вашего сайта.
Заключение
Следуя этому руководству, вы изучили 3 пути увеличения max_execution_time для WordPress, чтобы изменить в PHP время выполнения скрипта и избавится от ошибки Fatal Error: Maximum execution time exceeded . Если вы пользуетесь общим хостингом и не одно из решений вам не подошло, тогда обратитесь к своему провайдеру хостинга, чтобы проверить какие на самом деле у вас ограничения и возможно ли их изменение вообще.
Если у вас есть большой проэкт или сервер с ограниченными ресурсами, то Вы будете часто видеть «504 Gateway Time-out» ошибку.
Вы можете выполнить приведенные ниже шаги, чтобы увеличить значение тайм-аута. В PHP по умолчанию 30 секунд.
Изменения в php.ini
Если вы хотите изменить максимальное время выполнения для PHP скриптов из 30 секунд (по умолчанию) до 300 секунд.
Nano /etc/php5/fpm/php.ini
Установите…
Max_execution_time = 300
В Apache PHP работает как модуль, этих изменений будет достаточно. Но в нашем случае мы должны сделать изменения еще в нескольких местах.
Изменения в PHP-FPM
Это нужно, если Вы раскоментировали параметр request_terminate_timeout ранее. По умолчанию он закоментирован и берет значение max_execution_time found из php.ini
Открываем…
Nano /etc/php5/fpm/pool.d/www.conf
Устанавливаем…
Request_terminate_timeout = 300
Изменения в Nginx Config
Увеличение time limit-а для одного домена example.com
Nano /etc/nginx/sites-available/example.com location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_read_timeout 300; }
Если Вы хотите увеличить time-limit для всех доменов на вашем сервере, Вы можете отредактировать главный конфигурационный файл nginx.conf:
Nano /etc/nginx/nginx.conf
Добавить следующий параметр в http{..} секцию
Http { #... fastcgi_read_timeout 300; #... }