Ciao Belli!
Ho 2 problemi:
Il primo è che quando esequo grosse multi curl la memoria finisca, ho già risolto aumentandola con ini_set("memory_limit","64M");
Però non mi piace come soluzione! Non c'è un modo per elaborare il risultato del curl appena questo viene caricato e poter poi rimuovere subito dopo l'handle?
Secondo problema(quello importante): Ci mette troppo tempo! (tipo 40+ secondi)
Sono una ventina di link e se li fa tutti insieme non capisco perchè ci mette tanto!
I limiti di tempo sono settati! Timeout= 6 e ConnectTimeout=3
Quindi non vorrebbe dire che nella peggiore delle ipotesi impiega 9 secondi a completare (o a fallire) la pagina?
Codice PHP:
$mh = curl_multi_init();
for($j=0; $j<$i; $j++){
$ch[$j] = curl_init($SubLinks[$j]['Link']);
curl_setopt($ch[$j], CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch[$j], CURLOPT_TIMEOUT, 6);
curl_setopt($ch[$j], CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch[$j], CURLOPT_MAXREDIRS, 0);
curl_multi_add_handle($mh, $ch[$j]);
}
$active = null;
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
Dichiara_sites();
for($j=0; $j<$i; $j++){
if($ch[$j]){ // echo "
$j / $i";
$Dati[$j] = EstraiDati(curl_multi_getcontent($ch[$j]));
curl_multi_remove_handle($mh, $ch[$j]);
curl_close($ch[$j]);
}
}