Position actuelle: Accueil> Derniers articles> CURL_MULTI_CLOSE EXEMPLE D'UTILISATION: Comment gérer les demandes HTTP simultanées

CURL_MULTI_CLOSE EXEMPLE D'UTILISATION: Comment gérer les demandes HTTP simultanées

gitbox 2025-05-12

Dans le développement Web moderne, l'optimisation des performances a toujours été un sujet important. Surtout lorsque plusieurs demandes HTTP doivent être lancées, comment gérer efficacement simultanément affecte directement la vitesse de réponse du programme et l'efficacité des ressources du serveur. PHP fournit une extension Curl , où les fonctions Curl_Multi_ * Series peuvent aider les développeurs à traiter plusieurs demandes en même temps, améliorant considérablement l'efficacité de l'exécution.

Apprenez-en plus sur l'utilisation de Curl_Multi_Close et combinons-le avec des exemples réels pour expliquer comment gérer correctement les demandes HTTP simultanées.

Dans PHP, Curl_Multi_Close () est une fonction utilisée pour fermer une manche multiples Curl . Lorsque nous créons une manche multiple à l'aide de curl_multi_init () et d'ajout de plusieurs poignées Curl distinctes pour un traitement simultané via Curl_Multi_Add_Handle () , nous devons enfin appeler Curl_Multi_close () pour libérer des ressources pour éviter les fuites de mémoire.

Étapes d'utilisation de base

Le processus complet habituel des demandes simultanées est le suivant:

  1. Initialiser la manche multiple.

  2. Créez plusieurs poignées Curl Easy et définissez l'URL et les options correspondantes.

  3. Ajoutez une poignée facile à la multiplication multiple.

  4. Exécuter Multi Handle.

  5. Retirez et fermez chaque poignée facile.

  6. Fermez enfin la manche multi-montée (en utilisant curl_multi_close () ).

Exemple de code

Voici un exemple complet qui montre comment utiliser correctement Curl_Multi_Close () pour gérer les demandes HTTP simultanées:

 <?php

// À demander URL Liste
$urls = [
    'https://gitbox.net/api/data1',
    'https://gitbox.net/api/data2',
    'https://gitbox.net/api/data3',
];

// initialisation multi handle
$multiHandle = curl_multi_init();
$curlHandles = [];

// initialisation每个 cURL easy handle,et ajouter à multi handle
foreach ($urls as $i => $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[$i] = $ch;
}

// mettre en œuvre multi handle
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($running) {
        // En attente d&#39;une connexion active
        curl_multi_select($multiHandle);
    }
} while ($running > 0);

// Traitement Renvoie les résultats
foreach ($curlHandles as $ch) {
    $content = curl_multi_getcontent($ch);
    $info = curl_getinfo($ch);

    echo "demander URL: " . $info['url'] . PHP_EOL;
    echo "HTTP Code d&#39;état: " . $info['http_code'] . PHP_EOL;
    echo "Retour au contenu: " . substr($content, 0, 100) . "..." . PHP_EOL;
    echo str_repeat("-", 50) . PHP_EOL;

    // Retirer et fermer easy handle
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// fermeture multi handle
curl_multi_close($multiHandle);
?>

Notes clés

  • Assurez-vous d'appeler curl_multi_close () après que toutes les poignées faciles ont été supprimées.

  • Si vous oubliez d'appeler curl_multi_close () , la ressource peut être automatiquement publiée par PHP à la fin du script, mais ce n'est pas une bonne habitude, en particulier dans les environnements à long terme ou à haute revue, ce qui entraînera une fuite de mémoire.

  • curl_multi_close () ne ferme pas automatiquement la poignée facile ajoutée, donc avant de fermer la poignée multiple, chaque poignée facile doit être supprimée manuellement et fermée.

résumé

En utilisant correctement curl_multi_close () , il est possible de s'assurer que la gestion simultanée de la demande HTTP est à la fois efficace et sécurisée. N'oubliez pas, après que toutes les demandes sont traitées avec Curl_Multi , assurez-vous de nettoyer toutes les ressources de gérer votre programme robuste et performances.