TechnoSophos: PHP and curl_multi_exec

Comprendre le casse-tête de curl_multi_exec() qui semble bien bordélique.

Voir aussi : http://www.adrianworlddesign.com/Knowledge-Base/php/Download-content-with-cURL/Doing-curlmultiexec-the-right-way (2)

En fait, la fonction de Curl utilise un drapeau (flag) pour annoncer à PHP qu’il est encore occupé à recevoir des données (alors que les fonctions normales annoncent seulement un « j’ai fini » à PHP quand la fonction est terminée).

Les boucles do/while qu’on retrouve donc tout le temps servent à demander à Curl s’il a terminé ou pas (on lui demande constamment : t’en est où ? t’en est où ? t’en est où ? t’en est où ?). Il n’y a pas d’autres moyens, vu que Curl travaille sous PHP.

Le problème (lien (2)) c’est le do/while est très rapide et PHP fait alors des demandes bien trop vite, ce qui alourdi énormément la charge CPU. L’idée est de ne faire une boucle que si un autre flag est changé, et pour ce flag là, il n’est pas nécessaire de lancer une fonction lourde : on regarde juste le flag.

Perso j’ai plutôt opté pour un usleep(10000), qui dit à PHP d’attendre 10 millisecondes (10'000 µs) entre chaque demande de « t’en est où ? ».
Ça évite d’avoir un do/while dans un if dans un while, après un premier while.