0
点赞
收藏
分享

微信扫一扫

原生态php curl批量取url multi_curl

需要批量的从接口取数据,上千个url,一个一个太慢了,因此想着试一下multi_curl方式,记录一下.

<?php

$urls = [
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=1",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=2",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=3",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=4",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=5",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=6",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=7",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=8",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=9",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=10",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=11",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=12",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=13",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=14",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=15",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=16",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=17",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=18",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=19",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=20",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=21",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=22",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=23",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=24",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=25",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=26",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=27",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=28",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=29",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=30",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=31",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=32",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=34",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=35",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=36",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=37",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=38",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=39",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=40",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=41",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=42",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=43",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=44",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=45",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=46",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=47",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=48",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=49",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=50",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=51",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=52",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=53",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=54",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=55",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=56",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=57",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=58",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=59",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=60",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=61",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=62",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=63",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=64",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=65",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=66",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=67",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=68",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=69",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=70",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=71",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=72",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=73",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=74",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=75",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=76",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=77",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=78",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=79",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=80",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=81",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=82",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=83",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=84",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=85",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=86",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=87",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=88",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=89",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=90",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=91",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=92",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=93",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=94",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=95",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=96",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=97",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=98",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=99",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=100",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=101",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=102",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=103",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=104",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=105",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=106",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=107",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=108",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=109",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=110",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=111",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=112",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=113",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=114",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=115",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=116",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=117",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=118",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=119",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=120",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=121",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=122",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=123",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=124",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=125",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=126",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=127",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=128",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=129",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=130",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=131",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=132",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=133",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=134",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=135",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=136",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=137",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=138",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=139",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=140",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=141",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=142",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=143",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=144",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=145",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=146",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=147",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=148",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=149",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=150",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=151",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=152",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=153",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=154",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=155",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=156",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=157",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=158",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=159",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=160",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=161",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=162",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=163",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=164",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=165",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=166",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=167",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=168",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=169",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=170",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=171",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=172",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=173",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=174",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=175",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=176",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=177",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=178",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=179",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=180",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=181",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=182",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=183",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=184",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=185",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=186",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=187",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=188",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=189",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=190",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=191",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=192",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=193",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=194",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=195",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=196",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=197",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=198",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=199",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=200",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=201",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=202",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=203",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=204",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=205",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=206",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=207",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=208",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=209",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=210",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=211",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=212",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=213",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=214",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=215",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=216",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=217",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=218",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33690",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33691",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33692",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33693",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33694",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33695",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33696",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33697",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33698",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33699",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33700",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33701",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=33702",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=37312",
"http://api.yangshuiping.com/car/type?appkey=xxxx&parent=37313",
];


$start_time = microtime(true);
batchCurl($urls, FCPATH . 'saveCarDetail.json', true)
$end_time = microtime(true);
echo $end_time - $start_time;



/**
* 批量获取url内容
* @desc 批量获取url内容,可选择输出或者保存为文件
* @param urls array 需要批量获取的urls
* @param file_name_path 需要存储的文件名
* @param boolean writeToFile 是否写入文件,默认是需要写入文件的
* @return string return 返回大json数据或者保存为文件
*/
private function batchCurl($urls, $file_name_path = FCPATH . 'saveCarDetail.json', $writeToFile = TRUE) {
$queue = curl_multi_init(); //允许并行地处理批处理cURL句柄。
foreach ($urls as $i => $url) {
$ch[$i] = curl_init();
curl_setopt($ch[$i], CURLOPT_URL, $url); //这个curl只是说明了它是要干嘛,但是一直到 curl_multi_add_handle 都啥也没有去干,也就是说没有去模拟访问
curl_setopt($ch[$i], CURLOPT_TIMEOUT, 2500); //超时
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[$i], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0'); //指明你的浏览器,这是我的
//curl_setopt($ch[$i], CURLOPT_COOKIEFILE, $this->_cookie); // 如果是需要登陆才能采集的话,需要加上你登陆后得到的cookie文件
curl_setopt($ch[$i], CURLOPT_HEADER, 0);
curl_setopt($ch[$i], CURLOPT_NOSIGNAL, TRUE);
curl_multi_add_handle($queue, $ch[$i]); //向批处理句柄中添加句柄,后面批量的去模拟访问,抓取回资源
}
$responses = array(); //事先声名一个数组
do {
while (($code = curl_multi_exec($queue, $active)) == CURLM_CALL_MULTI_PERFORM); //返回值如果是0,那就得继续
} while ($active); //一直到资源里还有0条为止
//经过了刚才的循环指抓取 此时 $queue 就是一个批量的资源集了 这只是资源集,你需要把它读取出来就好
foreach ($urls as $i => $url) {
//要读取资源集的资源条抓取回来的内容,还得用专门的curl_multi_getcontent函数才能完成
$str[$i] = curl_multi_getcontent($ch[$i]);
$responses[$i] = json_decode($str[$i], TRUE)['result'];
curl_close($ch[$i]);
}
curl_multi_close($queue); //把总句柄关闭
if ($writeToFile === TRUE) {
//如果需要写入文件,那么就要检测目录是否存在,如果不存在,就要先创建目录,并给权限
$path_dir = pathinfo($file_name_path, PATHINFO_DIRNAME);
if (!is_dir($path_dir)) {
// linux下面创建目录必须要带权限
$dirRes = mkdir($path_dir, 0777, TRUE);
if (!$dirRes) {
$this->outPutJson(500, array(), '创建目录,权限不足');
}
}
$res = file_put_contents($file_name_path, json_encode($responses));
if ($res) {
$this->outPutJson(200, array(), '写入文件成功!');
} else {
$this->outPutJson(3002, array(), '写入文件失败!');
}
} else {
return $responses;
}
}

结果如下:

原生态php curl批量取url multi_curl_句柄

批量curl:(get请求)

/**
* 批量执行curl
* @Author yangshuiping
* @DateTime 2019-08-27T11:33:35+0800
* @param [type] $urls [批量url,get请求]
* @return [type] [description]
*/
function multi_curl($urls)
{
$queue = curl_multi_init(); //允许并行地处理批处理cURL句柄。
foreach ($urls as $i => $url) {
$ch[$i] = curl_init();
curl_setopt($ch[$i], CURLOPT_URL, $url); //这个curl只是说明了它是要干嘛,但是一直到 curl_multi_add_handle 都啥也没有去干,也就是说没有去模拟访问
curl_setopt($ch[$i], CURLOPT_TIMEOUT, 2500); //超时
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[$i], CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0'); //指明你的浏览器,这是我的
curl_setopt($ch[$i], CURLOPT_HEADER, 0);
curl_setopt($ch[$i], CURLOPT_NOSIGNAL, TRUE);
curl_multi_add_handle($queue, $ch[$i]); //向批处理句柄中添加句柄,后面批量的去模拟访问,抓取回资源
}
$responses = array(); //事先声名一个数组
do {
while (curl_multi_exec($queue, $active) == CURLM_CALL_MULTI_PERFORM); //返回值如果是0,那就得继续
} while ($active); //一直到资源里还有0条为止
//经过了刚才的循环指抓取 此时 $queue 就是一个批量的资源集了,这只是资源集,你需要把它读取出来就好
foreach ($urls as $i => $url) {
//要读取资源集的资源条抓取回来的内容,还得用专门的curl_multi_getcontent函数才能完成
$str[$i] = curl_multi_getcontent($ch[$i]);
$responses[$i] = json_decode($str[$i], TRUE)['data'];
curl_close($ch[$i]);
}
curl_multi_close($queue); //把总句柄关闭
return $responses;
}

​​相关链接​​

public function rollCurl($urls, $delay = 5)
{
$queue = curl_multi_init();
$map = [];

foreach ($urls as $url) {
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOSIGNAL, true);

curl_multi_add_handle($queue, $ch);
$map[(string) $ch] = $url;
}

$responses = [];
do {
while (($code = curl_multi_exec($queue, $active)) == CURLM_CALL_MULTI_PERFORM);

if ($code != CURLM_OK) {break;}
// a request was just completed -- find out which one
while ($done = curl_multi_info_read($queue)) {
// get the info and content returned on the request
// $info = curl_getinfo($done['handle']);
$error = curl_error($done['handle']);
// $results = callback(curl_multi_getcontent($done['handle']), $delay);
// $responses[$map[(string) $done['handle']]] = compact('info', 'error', 'results');
if ($error === 0) {
$responses[] = callback(curl_multi_getcontent($done['handle']), $delay);
}

// remove the curl handle that just completed
curl_multi_remove_handle($queue, $done['handle']);
curl_close($done['handle']);
}

// Block for data in / output; error handling is done by curl_multi_exec
if ($active > 0) {
curl_multi_select($queue, 0.5);
}

} while ($active);

curl_multi_close($queue);
return $responses;
}


举报

相关推荐

0 条评论