Bonjour.
J'essaie d'utiliser le MultiThreading en PHP en me servant de curl_multi_init et de DomDocument dont voici les codes:
CODE MULTI-THREADING:
Mon problème est que quand j'essaie d'appeler la fonction curlMulti($crawling); sur la ligne 29 de l'explorateur DomDocument du code ci-après, rien ne marche:
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 // Fonction pour faire plusieurs requêtes curl asynchrones (asynchrones: à la fois) function curlMulti($urls) { $mh = curl_multi_init(); // Initialisation de la multi session cURL // For each of the URLs in array foreach ($urls as $id => $d) { $ch[$id] = curl_init(); // Initialisation de la session cURL $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d; curl_setopt($ch[$id], CURLOPT_URL, $url); curl_setopt($ch[$id], CURLOPT_RETURNTRANSFER, TRUE); curl_multi_add_handle($mh, $ch[$id]); // Ajout de sessions cURL à cURL multi session } $running = NULL; // Définit $running sur NULL do { curl_multi_exec($mh, $running); // Exécution de plusieurs sessions cURL en parallèle } while ($running > 0); // Tant que $running est supérieur à zéro // Pour chaque Session cURL foreach($ch as $id => $content) { $results[$id] = curl_multi_getcontent($content); // Ajoute des résultats au tableau $results curl_multi_remove_handle($mh, $content); // Supprimer cURL multi session } curl_multi_close($mh); // Fermeture de la multi session cURL return $results; // Renvoie le tableau des résultats }
Comment donc réussir à corriger mes deux codes pour que l'exploration de plusieurs liens en parallèle (multi-crawling) se fasse avec succès et sans aucun souci ???
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
37 function follow_links($url) { // Give our function access to our crawl arrays. global $already_crawled; global $crawling; $options = array('http'=>array('method'=>"GET", 'headers'=>"User-Agent: hBot/0.1\n")); $context = stream_context_create($options); $doc = new DOMDocument(); $doc->loadHTMLFile($url); $linklist = $doc->getElementsByTagName("a"); foreach ($linklist as $link) { $l = $link->getAttribute("href"); if (!in_array($l, $already_crawled)) { $already_crawled[] = $l; $crawling[] = $l; echo get_details($l)."\n"; } } array_shift($crawling); curlMulti($crawling); foreach ($crawling as $site) { follow_links($site); } } follow_links($start);
Partager