web-dev-qa-db-fra.com

comprendre php curl_multi_exec

J'essaie de comprendre curl_multi_exec. J'ai copié un morceau de l'exemple manuel ici. Je me demande donc comment ça marche? La première boucle envoie la requête http, je suppose? Mais il est ensuite suivi d'une boucle à l'intérieur d'une boucle utilisant des fonctions avec des drapeaux apparemment non documentés.

Je souhaite télécharger + = 70 urls + = en parallèle.

http://www.php.net/manual/en/function.curl-multi-exec.php

<?php
...
$active = null;
//execute the handles
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
...
?>
31
glennv

Vous pouvez explorer deux articles qui décrivent cet exemple.

PHP et curl_multi_exec

Tout d'abord, voici le haut niveau. Il y a deux boucles extérieures. Le premier est chargé de vider le tampon curl dès maintenant. Le second est chargé d'attendre plus d'informations, puis d'obtenir ces informations. Ceci est un exemple de ce que l'on appelle le blocage des E/S. Nous bloquons l'exécution du reste du programme jusqu'à ce que les E/S réseau soient effectuées. Bien que ce ne soit généralement pas la manière la plus préférable de gérer les E/S réseau, c'est vraiment notre seul choix en PHP synchrone à un seul thread.

Faire curl_multi_exec de la bonne façon

D'abord la variable $ mrc et du manuel nous apprenons que la réponse est un code cURL défini dans les constantes prédéfinies cURL. En essence, c'est une réponse régulière et comme pour toute autre PHP curl_multi_exec n'est pas différente et ne renvoie une réponse qu'une fois qu'elle est terminée. Ce qui signifie qu'il ne devrait y avoir qu'une seule réponse. Dans un monde parfait cette réponse unique est 0 (zéro) ou égale à la constante prédéfinie CURLM_OK.

25
sectus