php curl_multi批处理
时间: 2023-10-10 21:12:59 浏览: 77
PHP 的 cURL 库提供了一个 `curl_multi_*` 系列的函数,可以实现批量处理多个 cURL 请求。使用 `curl_multi_*` 函数,可以实现在一个 PHP 脚本中同时发送多个 cURL 请求,而不需要等待每个请求的响应。
使用 `curl_multi_*` 函数的步骤如下:
1. 创建多个 cURL 句柄,设置每个句柄的选项。
2. 创建一个 cURL 多个句柄的管理器。
3. 将多个 cURL 句柄添加到管理器中。
4. 执行多个 cURL 句柄,等待所有请求的响应。
5. 处理每个请求的响应。
下面是一个示例代码:
```
<?php
// 创建多个 cURL 句柄
$urls = [
'http://www.example.com',
'http://www.example.net',
'http://www.example.org',
];
$curl_handlers = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_handlers[] = $ch;
}
// 创建一个 cURL 多个句柄的管理器
$mh = curl_multi_init();
// 将多个 cURL 句柄添加到管理器中
foreach ($curl_handlers as $ch) {
curl_multi_add_handle($mh, $ch);
}
// 执行多个 cURL 句柄,等待所有请求的响应
$active = null;
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) == -1) {
usleep(100);
}
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
// 处理每个请求的响应
foreach ($curl_handlers as $ch) {
$output = curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
// 处理响应
echo $output;
}
curl_multi_close($mh);
```
上述代码将创建多个 cURL 句柄,将它们添加到一个 cURL 多个句柄的管理器中,然后使用 `curl_multi_exec()` 函数并通过 `curl_multi_select()` 函数等待所有请求的响应。最后,使用 `curl_multi_getcontent()` 函数获取每个请求的响应,并处理它们。
阅读全文