函数名称:curl_multi_select()
适用版本:PHP 5, PHP 7
函数说明:curl_multi_select() 函数等待直到相应 cURL 多个句柄有数据可读或出现错误时,或者在指定的超时时间到期之前。此函数用于与 curl_multi_exec() 结合使用,以解决非阻塞式 curl 多个请求的等待问题。
用法: int curl_multi_select(resource $mh[, float $timeout = 1.0])
参数:
- $mh:cURL 多个句柄的资源。
- $timeout:可选参数,指定超时时间,单位为秒,默认为 1.0 秒。
返回值: 成功时返回活动描述符的数目,出现错误时返回 -1。
示例:
<?php
$mh = curl_multi_init(); // 初始化 cURL 多个句柄
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/api1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "http://www.example.com/api2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch2);
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
// 使用 curl_multi_select() 等待直到有数据可读或出现错误
curl_multi_select($mh);
}
} while ($active && $status == CURLM_OK);
// 获取 ch1 的响应数据
$response1 = curl_multi_getcontent($ch1);
// 获取 ch2 的响应数据
$response2 = curl_multi_getcontent($ch2);
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
// 处理响应数据
echo "Response from API1: " . $response1;
echo "Response from API2: " . $response2;
?>
上述示例代码展示了使用 curl_multi_select() 函数与 curl_multi_exec() 结合使用的方式。在该示例中,我们使用 curl_multi_init() 初始化 cURL 多个句柄,并将多个句柄添加到 cURL 多个句柄集合中。
在执行 curl_multi_exec() 时,如果仍有活动的请求,使用 curl_multi_select() 函数来等待数据可读或出现错误。然后通过 curl_multi_getcontent() 函数获取每个请求的响应数据。
最后,移除句柄并关闭 cURL 多个句柄集合。
请注意,上述示例仅用于展示 curl_multi_select() 的基本用法,实际使用中可能需要根据具体需求进行适当的调整。