11、PHP 8.4 新特性 - cURL 扩展 setopt 新增 CURLOPT_SERVER_RESPONSE_TIMEOUT 选项
注意:目前文档还没有更此说明,通过代码追踪可以看到这是 PHP 8.4 新增的。
在 PHP 8.4 中,cURL 扩展引入了一个新的选项 CURLOPT_SERVER_RESPONSE_TIMEOUT
,并正式替换了以前的 CURLOPT_FTP_RESPONSE_TIMEOUT
。这个新的选项旨在提供更加统一和一致的超时控制,特别是在处理 FTP 和其他协议的响应超时时。
此选项之前仅用于 FTP,而 cURL 随后扩展了对其他协议的支持,如 SFTP、SCP、IMAP、POP3 和 SMTP。由于它的首次使用是在 FTP 中,因此该选项被命名为 CURLOPT_FTP_RESPONSE_TIMEOUT
,并且 PHP 在所有当前版本中都支持它。然而,从 libcurl 7.85 开始,为了支持新的选项 CURLOPT_SERVER_RESPONSE_TIMEOUT
,旧的选项 CURLOPT_FTP_RESPONSE_TIMEOUT
被弃用了。在内部,这两个常量持有相同的整数值(112)。
这意味着:
- 如果你正在使用较新版本的 libcurl (7.85 或更高),建议迁移到
CURLOPT_SERVER_RESPONSE_TIMEOUT
以保持代码的现代性和兼容性。 - 尽管
CURLOPT_FTP_RESPONSE_TIMEOUT
仍然可以在现有的 PHP 版本中使用,但由于其已被标记为废弃,未来的 libcurl 版本可能会移除对该选项的支持。 - 两个选项在功能上是等效的,只是名称和适用范围有所不同。
CURLOPT_SERVER_RESPONSE_TIMEOUT
提供了一个更通用的解决方案,适用于多种协议。
PHP 8.4 及更高版本声明了一个新的常量 CURLOPT_SERVER_RESPONSE_TIMEOUT
,其值与现有的 CURLOPT_FTP_RESPONSE_TIMEOUT
常量相同。使用 CURLOPT_FTP_RESPONSE_TIMEOUT
常量的现有应用程序可以继续使用它,因为它并没有被弃用。
然而,如果应用程序仅运行在 PHP 8.4 及更高版本上,建议将 CURLOPT_FTP_RESPONSE_TIMEOUT
常量的引用替换为 CURLOPT_SERVER_RESPONSE_TIMEOUT
。
在功能上,CURLOPT_FTP_RESPONSE_TIMEOUT
和 CURLOPT_SERVER_RESPONSE_TIMEOUT
是相同的。
使用案例
<?php
declare(strict_types=1);
$ch = curl_init('https://qq.com');
// 设置 CURLOPT_SERVER_RESPONSE_TIMEOUT 选项
curl_setopt($ch, CURLOPT_SERVER_RESPONSE_TIMEOUT, 10); // 设置响应超时时间为10秒
// 设置其他常见的 cURL 选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// 检查请求是否成功
if ($response === false) {
echo "cURL 错误: " . curl_error($ch);
} else {
echo "响应内容: " . $response;
}
curl_close($ch);
定义如下
/**
* Time allowed to wait for FTP response.
* @link https://curl.haxx.se/libcurl/c/CURLOPT_FTP_RESPONSE_TIMEOUT.html
* @since 5.5
*/
define('CURLOPT_FTP_RESPONSE_TIMEOUT', 112);
/**
* @since 8.4
*/
define('CURLOPT_SERVER_RESPONSE_TIMEOUT', 112);
向后兼容性影响
可以通过在全局命名空间中声明新的 CURLOPT_SERVER_RESPONSE_TIMEOUT
常量,将其回溯到旧版本的 PHP 中。
if (\PHP_VERSION_ID < 80400) {
define('CURLOPT_SERVER_RESPONSE_TIMEOUT', 112);
}