curl_multi_init în PHP

Creează un grup în care mai multe cereri cURL rulează în paralel, în loc să aștepte una după alta.

Sintaxă
curl_multi_init(): CurlMultiHandle

Ce face curl_multi_init

Dacă ai de făcut 10 cereri care durează câte o secundă, una după alta înseamnă 10 secunde. Cu un grup „multi”, rulează simultan și totul durează cât cea mai lentă cerere.

Pașii sunt: curl_multi_init creează grupul, curl_multi_add_handle adaugă cererile, o buclă cu curl_multi_exec și curl_multi_select le rulează, curl_multi_getcontent citește răspunsurile, iar curl_multi_remove_handle scoate cererile din grup.

Ce returnează

Un obiect CurlMultiHandle.

Exemple

Exemplul 1: Trei cereri în paralel

<?php
$adrese = [
    "articole" => "https://www.dexblog.ro/wp-json/wp/v2/posts?per_page=1&_fields=id",
    "categorii" => "https://www.dexblog.ro/wp-json/wp/v2/categories?per_page=1&_fields=id",
    "lipsa" => "https://www.dexblog.ro/pagina-care-nu-exista/",
];

$mh = curl_multi_init();
$cereri = [];
foreach ($adrese as $nume => $url) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);
    curl_multi_add_handle($mh, $ch);
    $cereri[$nume] = $ch;
}

do {
    $stare = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh);
    }
} while ($active && $stare === CURLM_OK);

foreach ($cereri as $nume => $ch) {
    echo $nume . ": " . curl_getinfo($ch, CURLINFO_HTTP_CODE) . ", " . strlen(curl_multi_getcontent($ch)) . " octeți\n";
    curl_multi_remove_handle($mh, $ch);
}

Rezultat real (necesită conexiune la internet)

articole: 200, 14 octeți
categorii: 200, 13 octeți
lipsa: 404, 45691 octeți

Greșeli frecvente

  • Pornești sute de cereri deodată către același server. Îl poți supraîncărca sau poți fi blocat. Limitează cu curl_multi_setopt și CURLMOPT_MAX_HOST_CONNECTIONS.

Comenzi înrudite

  • curl_multi_add_handle: Adaugă o cerere cURL, deja configurată, într-un grup de cereri paralele.
  • 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_init / curl_setopt / curl_exec: Pregătește o cerere HTTP către alt server, de exemplu un API. Împreună cu curl_setopt și curl_exec, trimite cererea și primește răspunsul.