PHP 8.4: Curl: curl_version() 支持 feature_list
Curl 扩展的 curl_version
函数返回包含 Curl 版本及编译信息的关联数组。包括 Curl 版本、SSL 库名及版本、Brotli 和 libz 版本、Curl 支持的协议列表以及 Curl 支持的所有特性的位掩码(bitmask)。
功能的位掩码不便于发现,也不便于检查 Curl 中是否支持特定功能(如HTTP/2、HSTS等)。
在 PHP 8.4 中,curl_version
函数返回一个额外的数组键称为 feature_list
,这是一个 Curl 特性数组,说明是否支持这些特性。
curl_version();
[
"version_number" => 524801,
"age" => 10,
"features" => 1438631837,
+ "feature_list" => [
+ "AsynchDNS" => true,
+ "CharConv" => false,
+ "Debug" => false,
+ // ...
+ "HTTP2" => true,
+ "HTTPS_PROXY" => true,
+ "BROTLI" => true,
+ "ALTSVC" => true,
+ "HTTP3" => false,
+ "ZSTD" => true,
+ "HSTS" => true,
+ // ...
+ ],
"ssl_version_number" => 0,
"version" => "8.2.1",
"host" => "x86_64-pc-linux-gnu",
// ...
]
特性列表是一个简单的键值对数组,键是特性名,值是布尔值说明是否支持该特性。
这使它在检查 Curl 中是否支持某些功能时更具可读性。
比如,要检测是否支持 HTTP/3,它需要 CURL_VERSION_
常量的可用性,并检测 features
位掩码。在 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']
位掩码是否包含该值