<?php function multiCurl($res,$options=""){ if(count($res)<=0) return False; $handles = array(); if(!$options) // add default options $options = array( CURLOPT_HEADER=>0, CURLOPT_RETURNTRANSFER=>1, ); // add curl options to each handle foreach($res as $k=>$row){ $ch{$k} = curl_init(); $options[CURLOPT_URL] = $row['url']; curl_setopt_array($ch{$k}, $options); $handles[$k] = $ch{$k}; } $mh = curl_multi_init(); foreach($handles as $k => $handle){ curl_multi_add_handle($mh,$handle); //echo "<br>adding handle {$k}"; } $running_handles = null; //execute the handles $cme=null; $status=null; do { $status_cme = curl_multi_exec($mh, $running_handles); } while ($cme == CURLM_CALL_MULTI_PERFORM); while ($running_handles && $status_cme == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $status_cme = curl_multi_exec($mh, $running_handles); // echo "<br>''threads'' running = {$running_handles}"; } while ($status == CURLM_CALL_MULTI_PERFORM); } } foreach($res as $k=>$row){ $res[$k]['error'] = curl_error($handles[$k]); if(!empty($res[$k]['error'])) $res[$k]['data'] = ''; else $res[$k]['data'] = curl_multi_getcontent( $handles[$k] ); // get results // close current handler curl_multi_remove_handle($mh, $handles[$k] ); } curl_multi_close($mh); return $res; // return response } $res = array( "11"=>array("url"=>"http://api.211.100.56.140.xip.io/shows.json/263?appKey=strKfLS2Hecp"), "12"=>array("url"=>"http://api.211.100.56.140.xip.io/shows.json/263?appKey=strKfLS2Hecp"), ); print_r(multiCurl($res)); ?>