编程

PHP 8.2 新特性 —— 新增 curl_upkeep 函数

664 2022-12-01 02:37:08

PHP 8.2 新增了一个叫 curl_upkeep 的函数到 Curl 扩展中。curl_upkeep 函数在 libcurl 中调用 curl_easy_upkeep() 方法,libcurl 是 PHP Curl 扩展使用的底层 C 库。

curl_upkeep() 函数实现维护工作使 Curl 连接保持有效。不是所有连接类型 Curl 都支持连接。目前只有 HTTP/2 连接支持连接维护。

连接维护(Connection upkeep) 通常是通过发送一小段流量使连接保持有效。对于 HTTP/2,通过发送 HTTP/2 PING frame 保持连接。

This function is only available if the Curl extension is compiled with libcurl version 7.62 or later. Most up to date operating systems and distributions provide a libcurl version newer than 7.62.

函数语法

function curl_upkeep(CurlHandle $handle): bool {
}

从 PHP 8.0 起,所有 curl 函数返回/接收 CurlHandle 对象,而非传统的 PHP 资源对象。

如果连接不提供任何 upkeep 维护机制,或者 curl 连接没有建立,或者连接已关闭,函数会静默忽视这一调用且不会发出任何错误。

向下兼容性影响

curl_upkeep 是PHP 8.2中新加入CURL扩展的新函数。因为它底层依赖于 libcurl C 库,在用户空间PHP 中 polyfill 该函数是不可能的。

如果可能(或者除非通过CURLOPT_FORBID_REUSE 选项禁用),Curl 一般配置为重用连接,同时会配置足够长的 keep-alive 时间,因此,对 curl_upkeep() 函数的需求可能不会太明显。