PHP 8.4: Curl: curl_getinfo - поддержка CURLINFO_POSTTRANSFER_TIME_T

Источник: «PHP 8.4: Curl: curl_getinfo - CURLINFO_POSTTRANSFER_TIME_T support»
Функция curl_getinfo в расширении Curl возвращает список информации о запросе Curl. Также можно передать параметр в функцию, чтобы получить конкретную информацию о запросе.

Начиная с версии Curl 8.10.0, Curl может возвращать время, прошедшее с момента начала запроса до отправки последнего байта (иначе называемое post time). Это может быть удобным способом измерением длительности в некоторых запросах, таких как загрузка файла в удалённую HTTP-форму, загрузка файла по FTP и т.д.

PHP 8.4 предоставляет эту возможность, если в системе установлена libcurl 8.10.0 или более поздняя версия. Длительность запроса можно получить в виде ключа posttransfer_time_us в возвращаемом значении curl_getinfo или передав новую константу CURLINFO_POSTTRANSFER_TIME_T в функцию curl_getinfo.

posttransfer_time_us в curl_getinfo

Когда функция curl_getinfo вызывается без указания конкретной необходимой информации, она возвращает массив со всей доступной информацией о запросе.

В PHP 8.4 и более поздних версиях возвращаемый массив содержит новый ключ posttransfer_time_us, отображающий время отправки запроса в микросекундах.

$ch = curl_init('https://php.watch/versions/8.4/CURLINFO_POSTTRANSFER_TIME_T');
curl_exec($ch);

curl_getinfo($ch);
[
"url" => "https://php.watch/versions/8.4/CURLINFO_POSTTRANSFER_TIME_T",
"content_type" => "text/html; charset=UTF-8",
"http_code" => 200,
// ...
"total_time" => 1.669588,
"namelookup_time" => 0.307668,
"connect_time" => 0.615858,
// ...
"appconnect_time_us" => 966456,
"connect_time_us" => 615858,
"namelookup_time_us" => 307668,
"pretransfer_time_us" => 966533,
"redirect_time_us" => 0,
"starttransfer_time_us" => 1271738,
+ "posttransfer_time_us" => 966578, // <== New!
"total_time_us" => 1669588,
]

Если запрос не был отправлен, значение posttransfer_time_us остаётся равным 0. Это происходит после того, как другие значения ...time и ...time_us остаются равными 0, если запрос не был отправлен.

Передача CURLINFO_POSTTRANSFER_TIME_T в curl_getinfo

PHP 8.4, скомпилированный с libcurl 8.10.0 и более поздними версиями, предоставляет новую константу с названием CURLINFO_POSTTRANSFER_TIME_T. Она является одним из ожидаемых параметров функции curl_getinfo, возвращающей то же значение, что и ключ posttransfer_time_us.

Когда CURLINFO_POSTTRANSFER_TIME_T передаётся вторым параметром функции curl_getinfo, возвращаемое значение всегда будет равно 0 или целому положительному числу.

$ch = curl_init('https://php.watch/versions/8.4/CURLINFO_POSTTRANSFER_TIME_T');
curl_exec($ch);

curl_getinfo($ch, CURLINFO_POSTTRANSFER_TIME_T);
// 966578

Влияние на обратную совместимость

Теоретически возможно получить эту информацию и на более старых версиях PHP, если расширение Curl скомпилировано с libcurl 8.10.0 или более поздней версией. Константа CURLINFO_POSTTRANSFER_TIME_T просто обозначает второй параметр функции curl_getinfo.

Константе CURLINFO_POSTTRANSFER_TIME_T присваивается значение int 6291523, и её можно использовать непосредственно с функцией curl_getinfo:

curl_getinfo($ch, 6291523);

Комментарии


Дополнительные материалы

Предыдущая Статья

Новое в Symfony 7.2: Переработан компонент TypeInfo

Следующая Статья

PHP 8.4: Curl: Новая опция CURLOPT_PREREQFUNCTION