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 : Tout sélectionner
// 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
}Code : Tout sélectionner
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);