diff --git a/README.md b/README.md index 91dd2b5c1..7517fba8c 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ Polyfills are provided for: - the `array_find`, `array_find_key`, `array_any` and `array_all` functions introduced in PHP 8.4; - the `Deprecated` attribute introduced in PHP 8.4; - the `mb_trim`, `mb_ltrim` and `mb_rtrim` functions introduced in PHP 8.4; +- the `CURL_HTTP_VERSION_3` and `CURL_HTTP_VERSION_3ONLY` constants introduced in PHP 8.4; It is strongly recommended to upgrade your PHP version and/or install the missing extensions whenever possible. This polyfill should be used only when there is no diff --git a/src/Php84/README.md b/src/Php84/README.md index 96921439d..bd56cdc95 100644 --- a/src/Php84/README.md +++ b/src/Php84/README.md @@ -6,6 +6,7 @@ This component provides features added to PHP 8.4 core: - [`mb_ucfirst` and `mb_lcfirst`](https://wiki.php.net/rfc/mb_ucfirst) - [`array_find`, `array_find_key`, `array_any` and `array_all`](https://wiki.php.net/rfc/array_find) - [`Deprecated`](https://wiki.php.net/rfc/deprecated_attribute) +- `CURL_HTTP_VERSION_3` and `CURL_HTTP_VERSION_3ONLY` constants More information can be found in the [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). diff --git a/src/Php84/bootstrap.php b/src/Php84/bootstrap.php index 5a86f206f..357c27239 100644 --- a/src/Php84/bootstrap.php +++ b/src/Php84/bootstrap.php @@ -15,6 +15,11 @@ return; } +if (!defined('CURL_HTTP_VERSION_3')) { + define('CURL_HTTP_VERSION_3', 30); + define('CURL_HTTP_VERSION_3ONLY', 31); +} + if (!function_exists('array_find')) { function array_find(array $array, callable $callback) { return p\Php84::array_find($array, $callback); } } diff --git a/tests/Php84/Php84Test.php b/tests/Php84/Php84Test.php index 1b05902d1..ff36e78c5 100644 --- a/tests/Php84/Php84Test.php +++ b/tests/Php84/Php84Test.php @@ -64,6 +64,22 @@ public function testArrayAll(array $array, callable $callback, bool $expected) $this->assertSame($expected, array_all($array, $callback)); } + public function testCurlHttp3Constants() { + if (!function_exists('curl_version')) { + $this->markTestSkipped('Curl extension is not available.'); + } + + // If the curl_version()['features'] bitmask contains the bits for CURL_VERSION_HTTP3, + // it means Curl supports HTTP3. + if (!(curl_version()['features'] & 33554432)) { // 33554432 = CURL_VERSION_HTTP3 + $this->markTestSkipped('Curl extension is not built with HTTP3 support'); + } + + $ch = curl_init(); + $this->assertTrue(curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_3ONLY)); + $this->assertTrue(curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_3)); + } + public static function ucFirstDataProvider(): array { return [