From 7fb6afbe9f41ce8d0ca821575b01f5c06e996139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emre=20=C3=87al=C4=B1=C5=9Fkan?= <13554944+thecaliskan@users.noreply.github.com> Date: Thu, 17 Jul 2025 15:56:07 +0300 Subject: [PATCH] Add support for CURLINFO_QUEUE_TIME_T in curl_getinfo() (#19147) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch adds support for the CURLINFO_QUEUE_TIME_T constant in the curl_getinfo() function when compiled with libcurl >= 8.6.0. CURLINFO_QUEUE_TIME_T This constant allows retrieving the time (in microseconds) that the request spent in libcurl’s connection queue before it was sent. --- UPGRADING | 6 +++ ext/curl/curl.stub.php | 7 ++++ ext/curl/curl_arginfo.h | 5 ++- ext/curl/interface.c | 5 +++ .../curl_getinfo_CURLINFO_QUEUE_TIME_T.phpt | 41 +++++++++++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 ext/curl/tests/curl_getinfo_CURLINFO_QUEUE_TIME_T.phpt diff --git a/UPGRADING b/UPGRADING index d737e889393..dba8d29755c 100644 --- a/UPGRADING +++ b/UPGRADING @@ -193,6 +193,11 @@ PHP 8.5 UPGRADE NOTES used by a cURL transfer. It is primarily useful when connection reuse or connection pooling logic is needed in PHP-level applications. When curl_getinfo() returns an array, this value is available as the "conn_id" key. + . Added support for CURLINFO_QUEUE_TIME_T (libcurl >= 8.6.0) to the curl_getinfo() + function. This constant allows retrieving the time (in microseconds) that the + request spent in libcurl’s connection queue before it was sent. + This value can also be retrieved by passing CURLINFO_QUEUE_TIME_T to the + curl_getinfo() $option parameter. - DOM: . Added Dom\Element::$outerHTML. @@ -526,6 +531,7 @@ PHP 8.5 UPGRADE NOTES . CURLINFO_HTTPAUTH_USED. . CURLINFO_PROXYAUTH_USED. . CURLINFO_CONN_ID. + . CURLINFO_QUEUE_TIME_T. . CURLOPT_INFILESIZE_LARGE. . CURLFOLLOW_ALL. . CURLFOLLOW_OBEYCODE. diff --git a/ext/curl/curl.stub.php b/ext/curl/curl.stub.php index 5dac22ae795..7199583b903 100644 --- a/ext/curl/curl.stub.php +++ b/ext/curl/curl.stub.php @@ -3054,6 +3054,13 @@ const CURL_LOCK_DATA_PSL = UNKNOWN; * @cvalue CURLAUTH_BEARER */ const CURLAUTH_BEARER = UNKNOWN; +#if LIBCURL_VERSION_NUM >= 0x080600 /* Available since 8.6.0 */ +/** + * @var int + * @cvalue CURLINFO_QUEUE_TIME_T + */ +const CURLINFO_QUEUE_TIME_T = UNKNOWN; +#endif /** * @var int * @cvalue CURLINFO_APPCONNECT_TIME_T diff --git a/ext/curl/curl_arginfo.h b/ext/curl/curl_arginfo.h index 75be3b75c49..640eaa62f2f 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: 533884c442ca1146a61c0824a4f8c9628c31aae3 */ + * Stub hash: c2245ec496551980ca17ff4472cc1790653e41bd */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_close, 0, 1, IS_VOID, 0) ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0) @@ -812,6 +812,9 @@ static void register_curl_symbols(int module_number) REGISTER_LONG_CONSTANT("CURLOPT_HAPROXYPROTOCOL", CURLOPT_HAPROXYPROTOCOL, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURL_LOCK_DATA_PSL", CURL_LOCK_DATA_PSL, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLAUTH_BEARER", CURLAUTH_BEARER, CONST_PERSISTENT); +#if LIBCURL_VERSION_NUM >= 0x080600 /* Available since 8.6.0 */ + REGISTER_LONG_CONSTANT("CURLINFO_QUEUE_TIME_T", CURLINFO_QUEUE_TIME_T, CONST_PERSISTENT); +#endif REGISTER_LONG_CONSTANT("CURLINFO_APPCONNECT_TIME_T", CURLINFO_APPCONNECT_TIME_T, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLINFO_CONNECT_TIME_T", CURLINFO_CONNECT_TIME_T, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CURLINFO_NAMELOOKUP_TIME_T", CURLINFO_NAMELOOKUP_TIME_T, CONST_PERSISTENT); diff --git a/ext/curl/interface.c b/ext/curl/interface.c index ffb7889c748..56286fc222e 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2571,6 +2571,11 @@ PHP_FUNCTION(curl_getinfo) if (curl_easy_getinfo(ch->cp, CURLINFO_APPCONNECT_TIME_T, &co) == CURLE_OK) { CAAL("appconnect_time_us", co); } +#if LIBCURL_VERSION_NUM >= 0x080600 /* Available since 8.6.0 */ + if (curl_easy_getinfo(ch->cp, CURLINFO_QUEUE_TIME_T , &co) == CURLE_OK) { + CAAL("queue_time_us", co); + } +#endif if (curl_easy_getinfo(ch->cp, CURLINFO_CONNECT_TIME_T, &co) == CURLE_OK) { CAAL("connect_time_us", co); } diff --git a/ext/curl/tests/curl_getinfo_CURLINFO_QUEUE_TIME_T.phpt b/ext/curl/tests/curl_getinfo_CURLINFO_QUEUE_TIME_T.phpt new file mode 100644 index 00000000000..82064b93af1 --- /dev/null +++ b/ext/curl/tests/curl_getinfo_CURLINFO_QUEUE_TIME_T.phpt @@ -0,0 +1,41 @@ +--TEST-- +Curlinfo CURLINFO_QUEUE_TIME_T +--EXTENSIONS-- +curl +--SKIPIF-- += 8.6.0"); +?> +--FILE-- + 0); + +?> +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +