Bonjour
j'ai besoin de me connecter à un serveur que je ne maitrise pas.
Sur le serveur je dois lancer x fois une requête mais avec un parametre différent.
le problème est que si je fais un script sur mes x requetes le temps de résolution dépasse le max time limit d'ovh.
je suis donc parti vers un script que je lance avec des parametres pour un certains spectre d'url.
De ce fait le script lance l'appel de y url par le biais de la bibliothèque curl multi_init
lors du retour de chaque url je dois lancer une fonction de traitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 function multiple_threads_request($nodes){ $mh = curl_multi_init(); $curl_array = array(); foreach($nodes as $i => $url) { $curl_array[$i] = curl_init($url); curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $curl_array[$i]); } $running = NULL; do { usleep(10000); curl_multi_exec($mh,$running); } while($running > 0); $res = array(); foreach($nodes as $i => $url) { $res[$url] = curl_multi_getcontent($curl_array[$i]); *** } foreach($nodes as $i => $url){ curl_multi_remove_handle($mh, $curl_array[$i]); } curl_multi_close($mh); return $res; }
si je la lance dans le script au niveau des 3 ***, le script traitemnt sera lancé à chaque fois
mais si j'attends le retour du tableau res alors je dois attendre l'ensemble de la récupération des données
Question
ce code est-il optimisé pour le multi threads l'objectif étant de gagner du temps de traitement pour traiter le maximum d'url dans le temps imparti.
sinon je ne vois pas où mettre mon appel de fonction (car je ne vois pas où se trouve le résultat de chaque requete) dans ce script qui vient aussi de php.net
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 // Création des ressources cURL $ch1 = curl_init(); $ch2 = curl_init(); // Définit l'URL ainsi que d'autres options curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); // Création du gestionnaire multiple cURL $mh = curl_multi_init(); // Ajoute les deux gestionnaires curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $active = null; // Exécute le gestionnaire 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); } } // Ferme les gestionnaires curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);
Partager