Тарифы Услуги Сим-карты

Php замер времени выполнения скрипта. Php. Узнать время выполнения скрипта. Функции microtime() и time()

Приветствую Вас, уважаемые читатели блога webcodius! Итак, сразу к делу. Сначала отвечу на вторую часть вопроса: зачем же может понадобиться измерить время выполнения скрипта ?.При работе над отладкой веб-проектов важным фактором, который следует обязательно учитывать, является время выполнения скриптов. Этот параметр необходим чтобы понять насколько быстро и производительно работает тот или иной кусок кода. Определив время потраченное сервером на выполнение php скрипта, вы сможете сделать вывод: требуется ли оптимизация кода или нет. Далее рассмотрим как это сделать.

Для анализа производительности php-скриптов существуют различные расширения и библиотеки, например XDebug, которое может выполнять отладку скриптов и профилировать их по времени выполнения. Но для использования таких расширений требуется потратить время на их установку и настройку. Конечно для оптимизации работы крупных проектов со соложной архитектурой, большим количеством скриптов и миллионами строк кода лучше воспользоваться такими расширениями. Но если необходимо оптимизировать 3-4 скрипта с одной или двумя сотнями строк кода, то для измерения времени работы скрипта можно воспользоваться только средствами php.

Как в php определить время выполнения скрипта

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

Если запустить скрипт, то результат будет примерно таким:

Время выполнения скрипта: 0,00059400000000001

Кратко, как это работает. С помощью функции microtime(true) запоминаем метку времени начала работы скрипта в переменную $start . Далее идет рабочий код, который выполняет какие-то действия. В данном примере просто вызывается функция usleep() , которая замедляет работу скрипта на задданное количество микросекунд. И затем получаем время окончания работы скрипта, запоминаем ее в переменную $end и вычисляем время выполнения кода путем вычитания $start из $end . В итоге получили время выполнения скрипта.

Теперь зная как определить в php время выполнения скрипта , вы можете приступать к оптимизации различных блоков кода. Желаю удачи и до встречи в следующих постах!

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

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

Fatal error: Maximum execution time of 30 seconds exceeded in pandoge_com.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-файл в корне вашего сайта, где выведите значение установленного времени:

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


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

Можно приводить различные варианты. Зачем кому-то может потребоваться узнавать время за которое выполняется код.
Это может быть как личный интерес в тестировании на скорость выполнения чужих функций, библиотек, классов и тд.
Так и при разработке своих скриптов и замера скорости выполнения с целью дальнейшего улучшения.
Представим, что вы разработали какую-то функцию, которая выполняется в течении какого-то времени и вас не устраивает ее скорость работы.
И вы постепенно ее улучшаете. Но не совсем понятно приносят ли эти улучшения какую-то пользу в скорости выполнения или нет.
Для этого можно замерить скорость ее выполнения.

Вариант первый (Не совсем точный но подойдет как пример):
Можно воспользоваться встроенным в язык PHP классом DateTime для предоставлении даты и времен (он начал поддерживаться с PHP 5 по текущую версию PHP7).
Оговорю сразу, что в рамках данного примера для замера скорости будет использоваться функция usleep() , которая будет откладывать выполнение программы на указанное количество микросекунд. Вы можете выполнить проверку на своем коде, который необходимо проверить на скорость выполнения.

И так. Для начала отметим точку с которой необходимо начинать засекать время:

$startTime = new DateTime("now");
Создаем экземпляр класса DateTime с параметром "now" для получения текущего времени.
После этого необходимо разместить тело тестируемого скрипта (для примера это функция usleep).

$endTime = new DateTime("now");
И получаем разницу между началом и окончанием выполнения скрипта:
$interval = $startTime->diff($endTime);
И отображаем полученный результат в виде количества секунд и миллисекунд:
echo $interval->format("%S секунд, %f микросекунд");

Для более подробного и полного результата можно выполнить полную распечатку результата в плоть до указания года.
$interval->format("%Y лет, %M месяцев, %D дней, %H часов, %I минут, %S секунд, %f микросекунд"");


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

Скорость выполнения скрипта у меня:
01 секунд, 441 микросекунд

Весь код данного примера:
$startTime = new DateTime("now"); usleep(1000000); $endTime = new DateTime("now"); $interval = $startTime->diff($endTime); echo ($interval->format("%S секунд, %f микросекунд"));

Вариант второй :
Воспользоваться встроенной функцией microtime(), которая поддерживается с PHP4 по текущую версию PHP7 на момент написания статьи.

Функция microtime() возвращает текущую метку времени Unix в микросекундах. Эта функция доступна только на операционных системах, у которых есть системный вызов gettimeofday() .


Создаем переменную, которая будет засекать время начала проверки:
$start = microtime(true);
Параметром функции microtime передаем true для того, чтобы получить результат в вещественном виде float , представляющий собой текущее время в секундах, прошедших с начала эпохи Unix с точностью до микросекунд.
После этого размещаем тело тестируемого скрипта (для примера это функция usleep).
usleep(1000000); // Функция, которая откладывает время выполнения программы на 1000000 микросекунд
Теперь получаем время окончания работы скрипта:
$end = microtime(true);
Находим разницу между началом и концом работы скрипта:
$diff = $end - $start;
И отображаем результат:
echo "Время выполнения скрипта: ".($diff)." сек.";

Мой скрипт выполнялся в течении:
Время выполнения скрипта: 1.0004560947418 сек.

Весь код данного примера:
$start = microtime(true); usleep(1000000); $end = microtime(true); $diff = $end - $start; echo "Время выполнения скрипта: ".($diff)." сек.";

Какой вариант работает более точно не знаю, но предполагаю, что вариант с использованием функции microtime() должен быть более точным, так как в приведенном первом варианте, на создание экземпляра класса DateTime("now") должно затрачиваться больше времени.