我们在实际项目开发中会遇到有大量的接口请求,比如我要读取100张图片,通常的做法就是循环curl 请求,然后需要花费大量的时间,这在项目中是不被允许的,最后我们发现了多进程的curl 大大减少请求时间。
先上代码;
今天我想分享一个多进程curl的使用。
public function createUrl($url, $query) { $query = http_build_query($query); $url .= $query; return $url; } public function singleCurl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); return $ch; } //多进程curl public function multiCurl($ch_arr) { $mh = curl_multi_init(); foreach ($ch_arr as $k => $c) { curl_multi_add_handle($mh, $ch_arr[$k]); } //执行批处理 $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) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } foreach ($ch_arr as $k => $v) { if (curl_error($ch_arr[$k]) == '') { $res[$k] = json_decode(curl_multi_getcontent($ch_arr[$k]), true); } curl_close($ch_arr[$k]); } curl_multi_close($mh); return $res; }