curl_multi_exec în PHP

Avansează toate cererile dintr-un grup cURL și spune câte mai rulează. Se apelează într-o buclă până la final.

Sintaxă
curl_multi_exec(CurlMultiHandle $multi_handle, &$still_running): int

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.