原生态php curl批量取url multi_curl

本文介绍了一种使用PHP的multi_curl并发请求方法,通过批量处理大量URL来提高数据获取效率。文中提供了详细的代码实现及注释说明,有助于理解multi_curl的工作原理及其在实际场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要批量的从接口取数据,上千个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;
		}
	}

结果如下:

这里写图片描述

批量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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SHUIPING_YANG

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值