Position actuelle: Accueil> Derniers articles> Explication détaillée de la fonction PHP curl_multi_select() : attendre efficacement la fin des requêtes simultanées

Explication détaillée de la fonction PHP curl_multi_select() : attendre efficacement la fin des requêtes simultanées

M66 2025-10-10

Introduction à la fonction PHP curl_multi_select()

Dans le développement PHP, utiliser la bibliothèque cURL pour effectuer des requêtes HTTP est un moyen courant. Lorsque le projet doit traiter plusieurs requêtes HTTP en même temps, la série de fonctions curl_multi peut améliorer efficacement l'efficacité de l'exécution. Afin d'attendre la fin du transfert cURL actuellement actif, nous pouvons utiliser la fonction curl_multi_select() pour implémenter un mécanisme d'attente plus efficace.

définition de fonction

 <span class="fun">curl_multi_select(ressource $mh[, float $timeout])</span>

Description des paramètres

  • $mh : handle de lot cURL à attendre.
  • $timeout : Paramètre optionnel, indiquant le délai d'attente (unité : secondes). S'il est défini sur 0, il revient immédiatement.

effet de fonction

La fonction curl_multi_select() est utilisée pour attendre la fin du transfert cURL actuellement actif et renvoyer le nombre de handles lisibles. Grâce à cette fonction, le script peut rester actif en attendant la réponse du réseau, améliorant ainsi l'efficacité globale de l'exécution.

Exemple de code

 $mh = curl_multi_init();

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://example.com/api/request1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://example.com/api/request2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch2);

do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh); // En attente d&#39;actuellement actifcURLTransfert terminé
    }
} while ($active && $status == CURLM_OK);

// Une fois que toutes les demandes ont été traitées,fermeturecURLpoignée
foreach ([$ch1, $ch2] as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh);

Description des codes

Dans l'exemple ci-dessus, nous avons d'abord créé un handle de lot curl_multi et y avons ajouté deux requêtes curl indépendantes. Utilisez ensuite curl_multi_exec() pour exécuter le processus de transfert et attendez que la requête active en cours se termine via la fonction curl_multi_select() . La boucle continue jusqu'à ce que toutes les demandes aient été traitées. Enfin, nous nettoyons et fermons tous les handles pertinents pour libérer des ressources système.

Suggestions d'utilisation

L'utilisation de curl_multi_select() peut améliorer considérablement les performances de traitement des requêtes HTTP simultanées. Dans le développement réel, il est recommandé de gérer raisonnablement les délais d'attente et les exceptions pendant la période d'attente pour éviter que le script n'entre dans un état d'attente infini. De plus, la fonction curl_multi_info_read() peut être combinée pour obtenir l'état de retour de chaque requête pour une gestion plus détaillée des erreurs.

Résumer

curl_multi_select() est l'une des fonctions importantes de PHP pour le traitement simultané de plusieurs requêtes. En l'utilisant de manière appropriée, les développeurs peuvent maintenir les scripts actifs en attendant les réponses du réseau, améliorant ainsi considérablement l'efficacité des réponses des applications et l'expérience utilisateur.