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șiCURLMOPT_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.