19、PHP 8.4 新特性 - Curl:curl_version 函数支持 feature_list

作者: 温新

图书: 【PHP 8.4 新特性】

阅读: 122

时间: 2025-01-18 05:33:17

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 特性是否可用时,可以通过以下两种方法来进行判断:

  1. 检查相关的 CURL_VERSION_* 常量是否已声明。
  2. 检查 curl_version()['feature'] 位掩码是否包含该特性值。
请登录后再评论