Ce face curl_multi_exec
curl_multi_exec nu așteaptă terminarea cererilor: face cât poate fără să blocheze și pune în $still_running numărul de cereri încă active. De aceea se apelează într-o buclă, până când acest număr devine 0.
Ca bucla să nu consume procesorul degeaba, între apeluri se folosește curl_multi_select, care așteaptă activitate în rețea.
Parametri
| Parametru | Descriere |
|---|---|
$multi_handle |
Grupul. |
$still_running |
Variabilă în care se pune numărul de cereri încă active. |
Ce returnează
Un cod CURLM_*: 0 (CURLM_OK) dacă totul este în regulă.
Exemple
Exemplul 1: Bucla standard
<?php
$mh = curl_multi_init();
foreach (["https://www.dexblog.ro/", "https://www.dexblog.ro/invata/"] as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
}
$pasi = 0;
do {
$stare = curl_multi_exec($mh, $active);
$pasi++;
if ($active) {
curl_multi_select($mh);
}
} while ($active && $stare === CURLM_OK);
echo "Gata. Stare: $stare, cereri active: $active";
Rezultat real (necesită conexiune la internet)
Gata. Stare: 0, cereri active: 0
Greșeli frecvente
- Scrii bucla fără
curl_multi_select. Procesorul ajunge la 100% cât timp cererile așteaptă răspunsul.
Comenzi înrudite
curl_multi_select: Așteaptă până când una dintre cererile unui grup cURL are activitate în rețea, sau până expiră timpul.curl_multi_info_read: Returnează, pe rând, mesajele despre cererile terminate dintr-un grup cURL: care cerere și dacă a reușit.curl_multi_init: Creează un grup în care mai multe cereri cURL rulează în paralel, în loc să aștepte una după alta.