mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00

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']); ```
54 lines
1.1 KiB
PHP
54 lines
1.1 KiB
PHP
--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
|