Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The `phpinfo()` section of the Curl extension lists individual features supported by the particular ext-Curl + libcurl build. However, the `curl_version()` function return values do not indicate the same level of details. `curl_version()` has a `protocols` key that returns an array of all protocols supported by the build. But the `features` key is a bitmask of all the features. Checking the availability of certain feature requires knowing the corresponding `CURL_VERSION` constant, and checking the availability of the constant and a bitmask check for it in the `features` value. For example, to determine HTTP2 support, it requires evaluating: ```php defined('CURL_VERSION_HTTP2') && (curl_version()['features'] & CURL_VERSION_HTTP2 === CURL_VERSION_HTTP2) ``` To make feature availability checks more intuitive, this adds a new `feature_list` key to `curl_version()` output array. With it, checking for individual features availability is easier, and does not require inspecting the availability of the `CURL_VERSION` constant and the `features` key. ```php !empty(curl_version()['feature_list']['HTTP2']); ```
- Loading branch information
Showing
4 changed files
with
121 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
--TEST-- | ||
Test curl_version() - feature_list functionality | ||
--EXTENSIONS-- | ||
curl | ||
--FILE-- | ||
<?php | ||
$info_curl = curl_version(); | ||
print_r(array_map(fn ($v) => get_debug_type($v), $info_curl['feature_list'])); | ||
|
||
ob_start(); | ||
phpinfo(); | ||
$phpinfo = ob_get_clean(); | ||
|
||
foreach ($info_curl['feature_list'] as $key => $value) { | ||
if (!is_bool($value)) { | ||
throw new Exception('Found non-bool value'); | ||
} | ||
|
||
if (!str_contains($phpinfo, $key .' => ' . $value ? 'Yes' : 'No')) { | ||
throw new Exception($key . ' not found in Curl phpinfo()'); | ||
} | ||
} | ||
|
||
echo "Complete"; | ||
?> | ||
--EXPECTF-- | ||
Array | ||
( | ||
[AsynchDNS] => bool | ||
[CharConv] => bool | ||
[Debug] => bool | ||
[GSS-Negotiate] => bool | ||
[IDN] => bool | ||
[IPv6] => bool | ||
[krb4] => bool | ||
[Largefile] => bool | ||
[libz] => bool | ||
[NTLM] => bool | ||
[NTLMWB] => bool | ||
[SPNEGO] => bool | ||
[SSL] => bool | ||
[SSPI] => bool | ||
[TLS-SRP] => bool | ||
[HTTP2] => bool | ||
[GSSAPI] => bool | ||
[KERBEROS5] => bool | ||
[UNIX_SOCKETS] => bool | ||
[PSL] => bool | ||
[HTTPS_PROXY] => bool | ||
[MULTI_SSL] => bool | ||
[BROTLI] => bool | ||
%A | ||
) | ||
Complete |