Con il codice che ai proposto prima è qualche istante più veloce, ovviamente ho corretto la verifica del domino e certificato,valorizzato $running.
In questo esempio uso il do while perché almeno una volta il codice deve eseguirsi, unset per liberare memoria. (rallenta qualche millesimo). Però, sarebbe utile effettuare dei test sui diversi cicli per la cpu.
ecco a.php che va azionato con http://nick.altervista.org/a.php?a=0
Codice PHP:
<?php
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();//sec iniziali
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECADED);
ini_set("display_errors" , "stdout");
ini_set("display_startup_errors" , 1);
/**
@nodes array di url contenenti la richiesta alle Google API
*/
if(isset($_GET['a'])){
function multiCurl($nodes) {
$node_count = count($nodes);
$curl_arr = array();
$master = curl_multi_init();
$options = array(
CURLOPT_AUTOREFERER => true,
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => false,
CURLOPT_TIMEOUT => 3,
CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false
);
$i = 0;
do
{
$url =$nodes[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt_array($curl_arr[$i], $options);
curl_multi_add_handle($master, $curl_arr[$i]);
$i++;
} while ($i < $node_count);
unset($_GET,$url,$nodes,$options,$i);
$running = null;
do {
curl_multi_exec($master, $running);
} while($running);
$i = 0;
$results = array();
do {
curl_multi_remove_handle($master, $curl_arr[$i]);
if(!curl_errno($curl_arr[$i])){
$info[$i] = curl_getinfo($curl_arr[$i]);
}else{
$info[$i] = 'Curl error: '.curl_error($curl_arr[$i]);
}
if($i == $node_count-1){
curl_multi_close($master);
}
$results[$i] = array($i => $info[$i] , curl_multi_getcontent($curl_arr[$i]));
$i++;
}
while ($i < $node_count);
unset($running,$i,$info,$master,$curl_arr,$node_count);
return $results;
}
$i = 0;
$node_count = 200;
do{
$nodes[$i] ='http://nick.altervista.org/b.php?'.$i.'='.$i;
$i++;
} while ($i < $node_count);
print_r(multiCurl($nodes));
unset($nodes,$i,$node_count);
}
$time_end = getmicrotime();//sec finali
$time = $time_end - $time_start;//differenza in secondi
echo "Sono trascorsi $time secondi per l'esecuzione del codice.";
unset($time_end,$time_start,$time);
?>