public function executeRequests($handlers)
{
// On initialise une liste de sessions curl « $multihandler »
// chacune correspondra à une instance de curl qui ira se connecter à une URL
$multihandler = curl_multi_init();
foreach ($handlers as $handler) {
curl_setopt($handler['c'], CURLOPT_RETURNTRANSFER, TRUE);
curl_multi_add_handle($multihandler, $handler['c']);
}
do {
curl_multi_exec($multihandler, $pendingConnex);
usleep(10000);
// 10 ms
} while ($pendingConnex > 0);
// parse responses
$result = array();
foreach ($handlers as $handler) {
$data_encoded = curl_multi_getcontent($handler['c']);
try {
$class = $handler['class'];
$data = new $class($data_encoded);
$result[$handler['base']] = $data;
} catch (\Exception $e) {
$result[$handler['base']] = null;
}
}
// Fermeture des handlers : important pour éviter les fuites mémoires
foreach ($handlers as $handler) {
curl_multi_remove_handle($multihandler, $handler['c']);
}
curl_multi_close($multihandler);
return $result;
}