php curl asyc

function process_multi_requests($urls, $callback){
      $handle = curl_multi_init();

      foreach ($urls as $url) {
          $ch = curl_init($url);
          curl_setopt_array($ch, array(CURLOPT_RETURNTRANSFER => TRUE));
          curl_multi_add_handle($handle, $ch);
      }

      do {
          $mrc = curl_multi_exec($handle, $active);
          if ($state = curl_multi_info_read($handle)) {
              $info = curl_getinfo($state['handle']);
              $callback(curl_multi_getcontent($state['handle']), $info);
              curl_multi_remove_handle($handle, $state['handle']);
          }

      } while ($mrc == CURLM_CALL_MULTI_PERFORM || $active);

    curl_multi_close($handle);
} 

//usage example
$urls=array(
      "http://127.0.0.1/url1.php",
      "http://127.0.0.1/url2.php",
      "http://127.0.0.1/url3.php",
);

$GLOBALS['my_results']=[];
process_multi_requests($urls,function($result){  
 	$GLOBALS['my_results'][]=$result;
  	echo $result."\n";//called when the singe request is done
});
//this runs after all requests are done
print_r($GLOBALS['my_results']);//will contain all the results
Friendly Hawk