curl_multi_info_read în PHP

Returnează, pe rând, mesajele despre cererile terminate dintr-un grup cURL: care cerere și dacă a reușit.

Sintaxă
curl_multi_info_read(CurlMultiHandle $multi_handle, &$queued_messages = null): array|false

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 result ca să decizi dacă pagina e bună. Un răspuns 404 are result 0; verifică și curl_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).