CURL Multirequetes avec limitation

Eléphant du PHP | 59 Messages

03 nov. 2009, 10:02

Bonjour
Je voulais savoir si vous auriez une piste pour effectuer plusieurs requetes simultanées avec CURL mais en limitant les requetes simultanées par une variable X afin de ne pas surcharger le serveur.

Je fournis une liste de test a effectuer. Pour chaque test, le script doit se connecter a plusieurs pages en curl et extraire certains contenus via des pregmatch afin de les stocker dans un tableau. Tout fonctionne cependant c'est assez long. J'aimerai savoir si qqn pouvait me donner une piste sur les requetes simultanées, j'ai trouvé qqes pistes sur le net mais c'est assez flou pour moi :( je suis un peu perdu et je ne sais pas non plus comment limiter le nombre de requete simultanées.

Code : Tout sélectionner

echo $tableauHeader; #---------------------------------------------------- # Boucle de test pour $nb for($nb = 0; $nb != $nombre_total; $nb++) { ////////////////////////////////: $ch = curl_init($url1); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_POSTFIELDS, 'task='.$post_1.'&ok='.$donnees_recherche[$nb].'&mac_addr=&ip=&login'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_COOKIE, 'di='.$cookie); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $ret = curl_exec($ch); //traitement de la page et récupération des valeurs //print ($ret); #---------------------------------------------------- $ch = curl_init('$url2'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_COOKIE, 'di='.$cookie); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $ret = curl_exec($ch); preg_match_all('#id="id" value="(.+)"#', $ret, $rep_1s); $rep = $rep_1s[1][0]; //traitement de la page et récupération des valeurs echo " <TR class=\"data\"> <TH>".$donnees_recherche[$nb]."</TH> <TH>".$statut1."</TH> <TH>".$chaineDec."</TH> <TH>".$numChaineDec."</TH> <TH>".$statut2."</TH> </TR> "; } echo $tableauFooter; // Balise de fin
Je vous remercie par avance.

ViPHP
ViPHP | 2287 Messages

03 nov. 2009, 15:58

PHP est un langage synchrone non-multithreadé, ce qui signifie que tu ne peux pas paralléliser du code dans un même script. Si tu veux plusieurs requêtes CURL simultanées, il te faut multiplier les processus. Il faudrait donc que chaque requête CURL se lance dans un process (une instance de PHP) indépendant.

Si tu es sous linux (et que ton script n'aura pas vocation à être lancé sur un système windows), regarde du côté de pcntl_fork() : http://fr.php.net/pcntl_fork .
if(!@work()){ Nespresso(); } else { what(); }
______________________________