Simulate multiple threads request:
<?php
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;
}
print_r(muti_thread_request(array(
'http://www.example.com',
'http://www.example.net',
)));
?>
curl_multi_init
(PHP 5)
curl_multi_init — Retourne un nouveau cURL multiple
Description
resource curl_multi_init
( void
)
Autorise l'exécution de multiples gestionnaires cURL en parallèle.
Liste de paramètres
Cette fonction ne contient aucun paramètre.
Valeurs de retour
Retourne un gestionnaire cURL multiple en cas de succès,
FALSE si une erreur survient.
Exemples
Exemple #1 Exemple avec curl_multi_init()
Cet exemple crée deux gestionnaires cURL, les ajoute à un gestionnaire multiple, et les exécute en parallèle.
<?php
// 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);
?>
Voir aussi
- curl_init() - Initialise une session cURL
- curl_multi_close() - Termine un jeu de sessions cURL
hushuilong at gmail dot com
05-Aug-2011 12:21
jaisen at jmathai dot com
30-May-2008 12:09
http://github.com/jmathai/epicode/tree/master/php/EpiCurl.php
If you fire off 10 curl requests in parallel you don't have to wait for all of them to be finished before accessing one which is already finished.
