php 中curl 迴圈去請求多個URL和多線程去請求多個URL的方法
第一種:迴圈請求
$sr=array(url_1,url_2,url_3);foreach ($sr as $k=>$v) {$curlPost=$v.'?f=傳入參數';$ch = curl_init($curlPost) ; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 擷取資料返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在啟用 CURLOPT_RETURNTRANSFER 時候將擷取資料返回 $data = curl_exec($ch) ;echo $k.'##:'.$data.'
';
}
curl_close($ch);
第二種 多線程請求
$sr=array(url_1,url_2,url_3);
$mh = curl_multi_init(); foreach ($sr as $i => $url) { $curlPost=$url.'?f=%2Fpipefile%2Fskincss%2Fskincss_1356490012_1.zip%40%2Fskincss%2Fimages%2Fskincss_1356490012_1.jpg'; $conn[$i]=curl_init($curlPost); curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1); curl_multi_add_handle ($mh,$conn[$i]); } do { $mrc = curl_multi_exec($mh,$active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active and $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } foreach ($sr as $i => $url) { $res[$i]=curl_multi_getcontent($conn[$i]); curl_close($conn[$i]); } var_dump($res);
簡單測試 後 發現,同時請求4個不同的URl,迴圈的處理速度 好像比多線程的快,這個問題有待驗證