// 創建一對cURL資源 $ch1 = curl_init(); $ch2 = curl_init(); // 設置URL和相應的選項 curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch2, CURLOPT_URL, "http://testd.cm/b.php"); curl_setopt($ch2, CURLOPT_HEADER, 0); curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 ); // 創建批處理cURL句柄 $mh = curl_multi_init(); // 增加2個句柄 curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running=null; // 執行批處理句柄 do { //處理所有的請求,知道全部執行完畢 curl_multi_exec($mh,$running); } while($running > 0); //根據句柄獲取每個請求對應的返回的內容 $a = curl_multi_getcontent($ch1); ee($a); ee(curl_error($ch1)); //單個請求出錯,不會影響到其他請求 $b = curl_multi_getcontent($ch2); ee($b); // 關閉全部句柄 curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);
curl_multi_info_read, 邊讀邊取
// 創建一對cURL資源 $ch1 = curl_init(); $ch2 = curl_init(); // 設置URL和相應的選項 curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch2, CURLOPT_URL, "http://test.cm/b.php"); curl_setopt($ch2, CURLOPT_HEADER, 0); curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 ); // 創建批處理cURL句柄 $mh = curl_multi_init(); // 增加2個句柄 curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running=null; $msgs_in_queue = null; // 執行批處理句柄 do { //處理所有的請求,知道全部執行完畢 , 循環執行 $status = curl_multi_exec($mh,$running); $info = curl_multi_info_read($mh, $msgs_in_queue); if (false !== $info) { eee($msgs_in_queue); eee($info); //如果不為空則說明有返回結果 eee(curl_multi_getcontent($info['handle'])); } } while($status === CURLM_CALL_MULTI_PERFORM || $running > 0); // 關閉全部句柄 curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);
curl_multi_select,阻塞直到cURL批處理連接中有活動連接(todo ?)
// 創建一對cURL資源 $ch1 = curl_init(); $ch2 = curl_init(); // 設置URL和相應的選項 curl_setopt($ch1, CURLOPT_URL, "http://test.cm/a.php/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch2, CURLOPT_URL, "http://test.cm/b.php"); curl_setopt($ch2, CURLOPT_HEADER, 0); curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 ); // 創建批處理cURL句柄 $mh = curl_multi_init(); // 增加2個句柄 curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); // 執行批處理句柄 $running=null; do { curl_multi_exec($mh,$running); $ready=curl_multi_select($mh); // this will pause the loop if($ready>0){ while($info=curl_multi_info_read($mh)){ $status=curl_getinfo($info['handle'],CURLINFO_HTTP_CODE); if($status==200){ $successUrl=curl_getinfo($info['handle'],CURLINFO_EFFECTIVE_URL); echo($successUrl); print_r(curl_multi_getcontent($info['handle'])); } } } } while ($running>0 && $ready!=-1); // 關閉全部句柄 curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);