在 PHP 中,要实现并发请求,可以使用 curl_multi_init()
函数。这个函数允许你同时处理多个 cURL 会话。下面是一个简单的示例,展示了如何使用 curl_multi_init()
实现并发请求:
<?php
// 请求的 URL 列表
$urls = [
'https://example1.com',
'https://example2.com',
'https://example3.com'
];
// 初始化 cURL Multi 资源
$mh = curl_multi_init();
// 初始化 cURL 资源并设置选项
$ch = [];
foreach ($urls as $i => $url) {
$ch[$i] = curl_init();
curl_setopt($ch[$i], CURLOPT_URL, $url);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
// 将 cURL 资源加入到 cURL Multi 资源中
curl_multi_add_handle($mh, $ch[$i]);
}
$active = null;
// 执行处理
do {
$status = curl_multi_exec($mh, $active);
$info = curl_multi_info_read($mh);
if (false !== $info) {
// 获取请求结果
$content = curl_multi_getcontent($info['handle']);
echo "Result: " . $content . PHP_EOL;
// 移除已完成的 cURL 资源
curl_multi_remove_handle($mh, $info['handle']);
}
} while ($active && $status == CURLM_OK);
// 关闭 cURL Multi 资源
curl_multi_close($mh);
// 关闭 cURL 资源
foreach ($ch as $curl) {
curl_close($curl);
}
?>
这个示例首先创建一个 cURL Multi 资源,然后遍历 URL 列表,为每个 URL 初始化一个 cURL 资源并设置相应的选项。接着,将每个 cURL 资源加入到 cURL Multi 资源中。通过 curl_multi_exec()
函数执行处理,并使用 curl_multi_info_read()
函数读取已完成的请求。最后,获取请求结果并输出,同时关闭 cURL Multi 资源和 cURL 资源。