//并行调用接口
function multiRequest($url, $data, $timeout = 30) { $chArr = []; //创建多个cURL资源 foreach ($data as $k => $value) { $i = $k; $chArr[$i] = curl_init(); curl_setopt($chArr[$i], CURLOPT_URL, $url); //数组转为json串 $value = json_encode($value); //post请求 curl_setopt($chArr[$i], CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($chArr[$i], CURLOPT_POSTFIELDS, $value); curl_setopt($chArr[$i], CURLOPT_RETURNTRANSFER, 1); //只需要设置一个秒的数量就可以 curl_setopt($chArr[$i], CURLOPT_TIMEOUT, $timeout); //设置请求头 curl_setopt($chArr[$i], CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($value))); } //创建批处理cURL句柄 $mh = curl_multi_init(); //增加句柄 foreach ($chArr as $k => $ch) { curl_multi_add_handle($mh, $ch); } $active = null; do { while (($mrc = curl_multi_exec($mh, $active)) == CURLM_CALL_MULTI_PERFORM); if ($mrc != CURLM_OK) { break; } while ($done = curl_multi_info_read($mh)) { $info = curl_getinfo($done['handle']); $error = curl_error($done['handle']); $tmp = curl_multi_getcontent($done['handle']); $result[] = $tmp; curl_multi_remove_handle($mh, $done['handle']); curl_close($done['handle']); } if ($active > 0) { curl_multi_select($mh); } } while ($active); return $result; }