PHP 8.4: Curl: curl_version() поддержка feature_list

Источник: «PHP 8.4: Curl: curl_version() feature_list support»
В PHP 8.4 функция curl_version возвращает дополнительный ключ массива 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 и информацию о том, поддерживаются они или нет.

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:

 // Проверка, поддерживает ли Curl HTTP/3
-defined('CURL_VERSION_HTTP3') && (curl_version()['features'] & CURL_VERSION_HTTP3 === CURL_VERSION_HTTP3)
+!empty(curl_version()['feature_list']['HTTP3'])

Связанные изменения

Влияние на обратную совместимость

Вызовы функции curl_version() в PHP 8.4 и более поздних версиях возвращают новое значение feature_list. Эта функция не может быть перенесена на более ранние версии PHP.

Для кросс-версионной совместимости при проверке наличия определённой функции Curl проверьте, объявлена ли соответствующая константа CURL_VERSION_*, и содержит ли битовая маска curl_version()['feature'] это значение.


Дополнительные материалы

Предыдущая Статья

PHP 8.4: Новые функции mb_ucfirst и mb_lcfirst

Следующая Статья

Ошибки в составлении SQL запросов и как их избежать