Ce face curl_multi_info_read
Fiecare apel returnează un mesaj: un tablou cu msg (CURLMSG_DONE, adică terminată), result (codul de eroare cURL, 0 la succes) și handle (cererea). Când nu mai sunt mesaje, returnează false.
Așa poți procesa cererile imediat ce se termină, fără să aștepți întregul grup. Al doilea parametru primește numărul de mesaje rămase în coadă.
Parametri
| Parametru | Descriere |
|---|---|
$multi_handle |
Grupul. |
$queued_messages |
Opțional. Variabilă în care se pune numărul de mesaje rămase. |
Ce returnează
Un tablou cu mesajul, sau false dacă nu mai sunt mesaje.
Exemple
Exemplul 1: Cererile terminate, în ordinea finalizării
<?php
$mh = curl_multi_init();
foreach (["https://www.dexblog.ro/", "https://domeniu-inexistent-dexblog.ro/"] as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
}
do {
curl_multi_exec($mh, $active);
$active && curl_multi_select($mh);
} while ($active);
while ($info = curl_multi_info_read($mh, $ramase)) {
$url = curl_getinfo($info["handle"], CURLINFO_EFFECTIVE_URL);
echo $url . " => " . ($info["result"] === CURLE_OK ? "reușit" : curl_strerror($info["result"])) . " (rămase: $ramase)\n";
}
Rezultat real (necesită conexiune la internet)
https://www.dexblog.ro/ => reușit (rămase: 1)
https://domeniu-inexistent-dexblog.ro/ => Could not resolve hostname (rămase: 0)
Greșeli frecvente
- Te uiți doar la
resultca să decizi dacă pagina e bună. Un răspuns 404 areresult0; verifică șicurl_getinfo($info["handle"], CURLINFO_HTTP_CODE).
Comenzi înrudite
curl_multi_exec: Avansează toate cererile dintr-un grup cURL și spune câte mai rulează. Se apelează într-o buclă până la final.curl_multi_getcontent: Returnează răspunsul unei cereri rulate într-un grup cURL (cu CURLOPT_RETURNTRANSFER activ).curl_strerror: Returnează descrierea generală, în engleză, a unui cod de eroare cURL (de exemplu 28 = Timeout was reached).