Skip to content

Commit

Permalink
[PHP 8.4] Add CURL_HTTP_VERSION_3(ONLY) constants
Browse files Browse the repository at this point in the history
If the underlying Curl build supports it, setting the HTTP version
should be theoretically possible. The availability of the constants
do not guarantee the feature support, so declaring them in the
polyfill should be same and effective.

 - PR that added constants: [php-src#15350](php/php-src#15350)
 - libcurl doc on `CURLOPT_HTTP_VERSION`](https://curl.se/libcurl/c/CURLOPT_HTTP_VERSION.html)
 - [PHP.Watch: HTTP/3 Request with PHP Curl Extension](https://php.watch/articles/php-curl-http3)
 - Codex for [`CURL_HTTP_VERSION_3`](https://php.watch/codex/CURL_HTTP_VERSION_3) and [`CURL_HTTP_VERSION_3ONLY`](https://php.watch/codex/CURL_HTTP_VERSION_3ONLY)

Fixes GH-488.
  • Loading branch information
Ayesh committed Aug 27, 2024
1 parent c0fee7a commit a9e0756
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/Php84/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
5 changes: 5 additions & 0 deletions src/Php84/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -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); }
}
Expand Down
16 changes: 16 additions & 0 deletions tests/Php84/Php84Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 [
Expand Down

0 comments on commit a9e0756

Please sign in to comment.