在PHP中,使用cURL进行HTTP请求时,若要实现并发(即同时发起多个请求),一种常见且高效的方法是使用`curl_multi_*`函数族。这里,我将提供一个基于`curl_multi_init`和`curl_multi_exec`等函数的示例代码,以展示如何并发地执行多个cURL请求。
<?php
// 初始化多个cURL句柄的批处理句柄
$mh = curl_multi_init();
// 准备多个cURL句柄
$urls = [
'http://example.com/',
'http://google.com/',
'http://bing.com/'
];
$curl_array = [];
foreach ($urls as $key => $url) {
// 初始化cURL会话
$ch = curl_init($url);
// 设置cURL选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 保存到数组中
$curl_array[$key] = $ch;
// 将单个cURL句柄添加到批处理句柄中
curl_multi_add_handle($mh, $ch);
}
// 执行批处理句柄中的cURL句柄
$running = null;
do {
// 执行批处理句柄中的所有cURL句柄
curl_multi_exec($mh, $running);
} while ($running > 0);
// 关闭所有cURL句柄
foreach ($curl_array as $ch) {
// 检查是否有错误发生
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// 获取内容
$result = curl_multi_getcontent($ch);
// 打印结果(实际使用时可能需要进一步处理)
echo $result . "\n";
// 移除cURL句柄
curl_multi_remove_handle($mh, $ch);
// 关闭cURL句柄
curl_close($ch);
}
// 关闭批处理句柄
curl_multi_close($mh);
?>
这段代码首先初始化了一个cURL多句柄`$mh`,然后针对每个URL创建了一个cURL句柄,并将它们添加到多句柄`$mh`中。之后,使用`curl_multi_exec`函数循环执行这些句柄,直到所有句柄都执行完毕。最后,代码遍历每个cURL句柄,获取其内容,并在处理完毕后将其从多句柄中移除并关闭。整个过程中,所有的cURL请求都是并发执行的,这可以显著提高处理多个HTTP请求的效率。