diff --git a/UPGRADING b/UPGRADING index c046257074cd4..0868f4f3b4438 100644 --- a/UPGRADING +++ b/UPGRADING @@ -309,6 +309,11 @@ PHP 8.4 UPGRADE NOTES CURLINFO_HEADER_OUT, CURLINFO_DATA_IN, CURLINFO_DATA_OUT, CURLINFO_SSL_DATA_OUT, CURLINFO_SSL_DATA_IN constants. Once this option is set, CURLINFO_HEADER_OUT must not be set because it uses the same libcurl functionality. + . curl_getinfo() function now returns "posttransfer_time_us", containing the + number of microseconds from the start until the last byte is sent. When a + redirect is followed, the time from each request is added together. This + value can also be retrieved by passing CURLINFO_POSTTRANSFER_TIME_T to the + curl_getinfo() $option parameter. This requires libcurl 8.10.0 or later. - Date: . Added static methods @@ -1055,6 +1060,7 @@ PHP 8.4 UPGRADE NOTES . CURLINFO_DATA_OUT. . CURLINFO_SSL_DATA_OUT. . CURLINFO_SSL_DATA_IN. + . CURLINFO_POSTTRANSFER_TIME_T. - Intl: . The IntlDateFormatter class exposes now the new PATTERN constant diff --git a/ext/curl/curl.stub.php b/ext/curl/curl.stub.php index 3cd442674573b..49aa7d9646200 100644 --- a/ext/curl/curl.stub.php +++ b/ext/curl/curl.stub.php @@ -3054,6 +3054,13 @@ * @cvalue CURLINFO_TOTAL_TIME_T */ const CURLINFO_TOTAL_TIME_T = UNKNOWN; +#if LIBCURL_VERSION_NUM >= 0x080a00 /* Available since 8.10.0 */ +/** + * @var int + * @cvalue CURLINFO_POSTTRANSFER_TIME_T + */ +const CURLINFO_POSTTRANSFER_TIME_T = UNKNOWN; +#endif /** * @var int * @cvalue CURLOPT_DISALLOW_USERNAME_IN_URL diff --git a/ext/curl/curl_arginfo.h b/ext/curl/curl_arginfo.h index b472bafe8737a..7b56622b0a615 100644 --- a/ext/curl/curl_arginfo.h +++ b/ext/curl/curl_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: c5e16a7da3f25d061813235a262501e0d8747ccb */ + * Stub hash: 6a6a7461b475bb10cef3048ee2c11ab0dd32f328 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_close, 0, 1, IS_VOID, 0) ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0) @@ -799,6 +799,9 @@ static void register_curl_symbols(int module_number) REGISTER_LONG_CONSTANT("CURLINFO_REDIRECT_TIME_T", CURLINFO_REDIRECT_TIME_T, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLINFO_STARTTRANSFER_TIME_T", CURLINFO_STARTTRANSFER_TIME_T, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLINFO_TOTAL_TIME_T", CURLINFO_TOTAL_TIME_T, CONST_PERSISTENT); +#if LIBCURL_VERSION_NUM >= 0x080a00 /* Available since 8.10.0 */ + REGISTER_LONG_CONSTANT("CURLINFO_POSTTRANSFER_TIME_T", CURLINFO_POSTTRANSFER_TIME_T, CONST_PERSISTENT); +#endif REGISTER_LONG_CONSTANT("CURLOPT_DISALLOW_USERNAME_IN_URL", CURLOPT_DISALLOW_USERNAME_IN_URL, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLOPT_PROXY_TLS13_CIPHERS", CURLOPT_PROXY_TLS13_CIPHERS, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLOPT_TLS13_CIPHERS", CURLOPT_TLS13_CIPHERS, CONST_PERSISTENT); diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 540d326169e86..e47c9c43bc8a9 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2598,6 +2598,11 @@ PHP_FUNCTION(curl_getinfo) if (curl_easy_getinfo(ch->cp, CURLINFO_STARTTRANSFER_TIME_T, &co) == CURLE_OK) { CAAL("starttransfer_time_us", co); } +#if LIBCURL_VERSION_NUM >= 0x080a00 /* Available since 8.10.0 */ + if (curl_easy_getinfo(ch->cp, CURLINFO_POSTTRANSFER_TIME_T, &co) == CURLE_OK) { + CAAL("posttransfer_time_us", co); + } +#endif if (curl_easy_getinfo(ch->cp, CURLINFO_TOTAL_TIME_T, &co) == CURLE_OK) { CAAL("total_time_us", co); } diff --git a/ext/curl/tests/curl_getinfo_CURLINFO_POSTTRANSFER_TIME_T.phpt b/ext/curl/tests/curl_getinfo_CURLINFO_POSTTRANSFER_TIME_T.phpt new file mode 100644 index 0000000000000..595d7007991c0 --- /dev/null +++ b/ext/curl/tests/curl_getinfo_CURLINFO_POSTTRANSFER_TIME_T.phpt @@ -0,0 +1,41 @@ +--TEST-- +Curlinfo CURLINFO_POSTTRANSFER_TIME_T +--EXTENSIONS-- +curl +--SKIPIF-- += 8.10.0"); +?> +--FILE-- + 0); + +?> +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +