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:

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
}
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
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);
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 ???