PHP 8.4: Curl: curl_getinfo - поддержка CURLINFO_POSTTRANSFER_TIME_T
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);