php-src/ext/curl/tests/curl_version_features-array.phpt
Ayesh Karunaratne ba0f9fb501
ext/curl: Add feature_info assoc array to curl_version() (#13439)
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']);
```
2024-02-21 00:46:22 +00:00

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