Commit 93cb2764e1a for php
commit 93cb2764e1a6e9ccacc3569f46c7fa7a55b1e6ac
Author: Sjoerd Langkemper <sjoerd-github@linuxonly.nl>
Date: Thu Nov 12 11:07:04 2026 +0100
ext/curl: Add more options to curl (#22840)
- CURLOPT_ECH
- CURLOPT_HAPROXY_CLIENT_IP
- CURLOPT_SERVER_RESPONSE_TIMEOUT_MS
- CURLOPT_MAIL_RCPT_ALLOWFAILS (correct spelling of CURLOPT_MAIL_RCPT_ALLLOWFAILS)
diff --git a/UPGRADING b/UPGRADING
index 875e0555456..3fc692ac9ac 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -74,6 +74,8 @@ PHP 8.7 UPGRADE NOTES
- Curl:
. Multiple files can now be uploaded with the same field name by passing an
array of CURLFile or CURLStringFile objects to CURLOPT_POSTFIELDS.
+ . Support for upstream options CURLOPT_ECH, CURLOPT_HAPROXY_CLIENT_IP, and
+ CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.
- Intl:
. Added IntlRelativeDateTimeFormatter to format relative date and time offsets
@@ -165,6 +167,12 @@ PHP 8.7 UPGRADE NOTES
10. New Global Constants
========================================
+- Curl:
+ . New options: CURLOPT_ECH, CURLOPT_HAPROXY_CLIENT_IP,
+ CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.
+ . CURLOPT_MAIL_RCPT_ALLOWFAILS is the correctly spelled alternative to
+ CURLOPT_MAIL_RCPT_ALLLOWFAILS.
+
========================================
11. Changes to INI File Handling
========================================
diff --git a/ext/curl/curl.stub.php b/ext/curl/curl.stub.php
index 6953f0e97cb..bac8694da63 100644
--- a/ext/curl/curl.stub.php
+++ b/ext/curl/curl.stub.php
@@ -77,6 +77,13 @@
* @cvalue CURLOPT_DNS_USE_GLOBAL_CACHE
*/
const CURLOPT_DNS_USE_GLOBAL_CACHE = UNKNOWN;
+#if LIBCURL_VERSION_NUM >= 0x080800 /* Available since 8.8.0 */
+/**
+ * @var int
+ * @cvalue CURLOPT_ECH
+ */
+const CURLOPT_ECH = UNKNOWN;
+#endif
/**
* @var int
* @cvalue CURLOPT_EGDSOCKET
@@ -143,6 +150,13 @@
* @cvalue CURLOPT_FTP_USE_EPSV
*/
const CURLOPT_FTP_USE_EPSV = UNKNOWN;
+#if LIBCURL_VERSION_NUM >= 0x080200 /* Available since 8.2.0 */
+/**
+ * @var int
+ * @cvalue CURLOPT_HAPROXY_CLIENT_IP
+ */
+const CURLOPT_HAPROXY_CLIENT_IP = UNKNOWN;
+#endif
/**
* @var int
* @cvalue CURLOPT_HEADER
@@ -1383,6 +1397,13 @@
* @cvalue CURLOPT_SERVER_RESPONSE_TIMEOUT
*/
const CURLOPT_SERVER_RESPONSE_TIMEOUT = UNKNOWN;
+#if LIBCURL_VERSION_NUM >= 0x080600 /* Available since 8.6.0 */
+/**
+ * @var int
+ * @cvalue CURLOPT_SERVER_RESPONSE_TIMEOUT_MS
+ */
+const CURLOPT_SERVER_RESPONSE_TIMEOUT_MS = UNKNOWN;
+#endif
/**
* @var int
* @cvalue CURLOPT_IPRESOLVE
@@ -3279,7 +3300,12 @@
#if LIBCURL_VERSION_NUM >= 0x074500 /* Available since 7.69.0 */
/**
* @var int
- * @cvalue CURLOPT_MAIL_RCPT_ALLLOWFAILS
+ * @cvalue CURLOPT_MAIL_RCPT_ALLOWFAILS
+ */
+const CURLOPT_MAIL_RCPT_ALLOWFAILS = UNKNOWN;
+/**
+ * @var int
+ * @cvalue CURLOPT_MAIL_RCPT_ALLOWFAILS
*/
const CURLOPT_MAIL_RCPT_ALLLOWFAILS = UNKNOWN;
#endif
diff --git a/ext/curl/curl_arginfo.h b/ext/curl/curl_arginfo.h
index c38d581cb3c..bf47f682b1b 100644
Binary files a/ext/curl/curl_arginfo.h and b/ext/curl/curl_arginfo.h differ
diff --git a/ext/curl/curl_private.h b/ext/curl/curl_private.h
index 25cc37b6e45..f8550dc3f74 100644
--- a/ext/curl/curl_private.h
+++ b/ext/curl/curl_private.h
@@ -26,6 +26,10 @@
#include <curl/curl.h>
#include <curl/multi.h>
+#if LIBCURL_VERSION_NUM < 0x080200 /* Available since 8.2.0 */
+# define CURLOPT_MAIL_RCPT_ALLOWFAILS CURLOPT_MAIL_RCPT_ALLLOWFAILS
+#endif
+
#define CURLOPT_RETURNTRANSFER 19913
#define CURLOPT_BINARYTRANSFER 19914 /* For Backward compatibility */
#define PHP_CURL_STDOUT 0
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index 94618e4bf74..b94949b784c 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -1865,7 +1865,7 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue
case CURLOPT_MAXAGE_CONN:
#endif
#if LIBCURL_VERSION_NUM >= 0x074500 /* Available since 7.69.0 */
- case CURLOPT_MAIL_RCPT_ALLLOWFAILS:
+ case CURLOPT_MAIL_RCPT_ALLOWFAILS:
#endif
#if LIBCURL_VERSION_NUM >= 0x074a00 /* Available since 7.74.0 */
case CURLOPT_HSTS_CTRL:
@@ -1888,6 +1888,9 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue
case CURLOPT_CA_CACHE_TIMEOUT:
case CURLOPT_QUICK_EXIT:
#endif
+#if LIBCURL_VERSION_NUM >= 0x080600 /* Available since 8.6.0 */
+ case CURLOPT_SERVER_RESPONSE_TIMEOUT_MS:
+#endif
#if LIBCURL_VERSION_NUM >= 0x080900 /* Available since 8.9.0 */
case CURLOPT_TCP_KEEPCNT:
#endif
@@ -2031,6 +2034,12 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue
case CURLOPT_PASSWORD:
#if LIBCURL_VERSION_NUM >= 0x080e00 /* Available since 8.14.0 */
case CURLOPT_SSL_SIGNATURE_ALGORITHMS:
+#endif
+#if LIBCURL_VERSION_NUM >= 0x080200 /* Available since 8.2.0 */
+ case CURLOPT_HAPROXY_CLIENT_IP:
+#endif
+#if LIBCURL_VERSION_NUM >= 0x080800 /* Available since 8.8.0 */
+ case CURLOPT_ECH:
#endif
{
if (Z_ISNULL_P(zvalue)) {