Just to let others who might be struggling to get it to work, curl_multi_info_read() doesn't work in PHP versions before 5.2.0, and instead returns NULL immediately.(PHP 5, PHP 7, PHP 8)
curl_multi_info_read — Ottiene informazioni sui trasferimenti correnti
Chiede all'handle multiplo se c'è qualche messaggio o informazione dai trasferimenti individuali. I messaggi possono includere informazioni come un codice di errore dal trasferimento o solo il fatto che il trasferimento è completato.
   
   Chiamate ripetute a questa funzione restituiranno un nuovo risultato ogni volta, finchè non viene restituito un false 
   come segnale che non c'è più nulla da ottenere a quel punto. L'intero a cui punterà 
   queued_messages conterrà il numero dei messaggi rimanenti dopo che questa
   funzione è stata chiamata.
  
I dati a cui la risorsa restituita punta non sopravviveranno chiamando curl_multi_remove_handle().
mh
Un identificativo multiplo rstituito da curl_multi_init().
queued_messagesIl numero di messaggi che sono ancora in coda
   In caso di successo, restituisce un array associativo per il messaggio, false in caso di fallimento.
  
| Chiave: | Valore: | 
|---|---|
| msg | La costante CURLMSG_DONE. Altri valori restituiti
       non sono attualmente disponibili. | 
| result | Una delle costanti CURLE_*. Se tutto è
       OK, il risultato saràCURLE_OK. | 
| handle | Risorsa di tipo curl indica l'handle a cui è associato. | 
| Versione | Descrizione | 
|---|---|
| 8.0.0 | multi_handleexpects a CurlMultiHandle
  instance now; previously, a resource was expected. | 
Example #1 Un esempio di curl_multi_info_read()
<?php
$urls = array(
   "http://www.cnn.com/",
   "http://www.bbc.co.uk/",
   "http://www.yahoo.com/"
);
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
    $conn[$i] = curl_init($url);
    curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
    curl_multi_add_handle($mh, $conn[$i]);
}
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh);
    }
    while (false !== ($info = curl_multi_info_read($mh))) {
        var_dump($info);
    }
} while ($active && $status == CURLM_OK);
foreach ($urls as $i => $url) {
    $res[$i] = curl_multi_getcontent($conn[$i]);
    curl_close($conn[$i]);
}
var_dump(curl_multi_info_read($mh));
?>Il precedente esempio visualizzerà qualcosa simile a:
array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(5) of type (curl)
}
array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(7) of type (curl)
}
array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(6) of type (curl)
}
bool(false)
Just to let others who might be struggling to get it to work, curl_multi_info_read() doesn't work in PHP versions before 5.2.0, and instead returns NULL immediately.