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);