19、PHP 8.4 新特性 - Curl:curl_version 函数支持 feature_list
在 PHP 8.4 中,curl_version()
函数进行了更新,增强了对 feature_list
字段的支持。具体来说,feature_list
字段现在包含了更多的信息,帮助开发者更加方便地了解当前 cURL 版本所支持的功能。
curl_version
函数在 Curl 扩展中返回一个关联数组,其中包含 Curl 的版本和构建信息。这个信息包括 Curl 版本、SSL 库的名称和版本、Brotli 和 libz 的版本、Curl 构建支持的协议列表,以及一个包含所有 Curl 支持特性的位掩码。
特性的位掩码不容易直观地发现,因此很难轻松检查某个特性(如 HTTP/2、HSTS 等)是否被 Curl 支持。
在 PHP 8.4 中,curl_version
函数返回一个额外的数组键 feature_list
,该键包含一个 Curl 特性的数组,以及每个特性是否被支持的信息。
<?php
declare(strict_types=1);
print_r(curl_version());
输出
Array
(
[version_number] => 478209
[age] => 8
[features] => 29345693
[feature_list] => Array
(
[AsynchDNS] => 1
[CharConv] =>
[Debug] =>
[GSS-Negotiate] =>
[IDN] => 1
[IPv6] => 1
[krb4] =>
[Largefile] => 1
[libz] => 1
[NTLM] => 1
[NTLMWB] => 1
[SPNEGO] => 1
[SSL] => 1
[SSPI] =>
[TLS-SRP] => 1
[HTTP2] => 1
[GSSAPI] => 1
[KERBEROS5] => 1
[UNIX_SOCKETS] => 1
[PSL] => 1
[HTTPS_PROXY] => 1
[MULTI_SSL] =>
[BROTLI] => 1
[ALTSVC] => 1
[HTTP3] =>
[UNICODE] =>
[ZSTD] =>
[HSTS] =>
[GSASL] =>
)
[ssl_version_number] => 0
[version] => 7.76.1
[host] => x86_64-redhat-linux-gnu
[ssl_version] => OpenSSL/3.2.2
[libz_version] => 1.2.11
[protocols] => Array
(
[0] => dict
[1] => file
[2] => ftp
[3] => ftps
[4] => gopher
[5] => gophers
[6] => http
[7] => https
[8] => imap
[9] => imaps
[10] => ldap
[11] => ldaps
[12] => mqtt
[13] => pop3
[14] => pop3s
[15] => rtsp
[16] => scp
[17] => sftp
[18] => smb
[19] => smbs
[20] => smtp
[21] => smtps
[22] => telnet
[23] => tftp
)
[ares] =>
[ares_num] => 0
[libidn] => 2.3.0
[iconv_ver_num] => 0
[libssh_version] => libssh/0.10.4/openssl/zlib
[brotli_ver_num] => 16777225
[brotli_version] => 1.0.9
)
特性列表是一个简单的键值数组,其中键是特性的名称,值始终是一个布尔值,表示该特性是否被支持。
这使得检查 Curl 是否支持某些特性时更加直观易读。
例如,检查是否支持 HTTP/3,在 PHP 8.4 之前,需要检查 CURL_VERSION_
常量的可用性,并查看特性位掩码。而在 PHP 8.4 及以后版本,只需要检查 feature_list
数组:
// Check if HTTP/3 is supported in Curl
defined('CURL_VERSION_HTTP3') && (curl_version()['features'] & CURL_VERSION_HTTP3 === CURL_VERSION_HTTP3)
!empty(curl_version()['feature_list']['HTTP3']);
向后兼容性影响
在 PHP 8.4 及更高版本中,curl_version()
函数返回了一个新的 feature_list
值。这个新功能无法移植到旧版本的 PHP。
为了确保跨版本兼容性,在检查某个 Curl 特性是否可用时,可以通过以下两种方法来进行判断:
- 检查相关的
CURL_VERSION_*
常量是否已声明。 - 检查
curl_version()['feature']
位掩码是否包含该特性值。
请登录后再评论