Position actuelle: Accueil> Derniers articles> Comment fermer correctement plusieurs connexions Curl à l'aide de curl_multi_close

Comment fermer correctement plusieurs connexions Curl à l'aide de curl_multi_close

gitbox 2025-05-12

Dans PHP, la famille de fonction Curl_Multi_ * est utilisée pour exécuter plusieurs demandes Curl simultanément. curl_multi_close () est une fonction importante dans cette série pour fermer plusieurs poignées Curl initialisées par curl_multi_init () .

Quelle est la série de fonctions Curl_Multi_ * ?

La famille de fonction Curl_Multi_ * est un outil de PHP pour traiter plusieurs requêtes Curl en parallèle. Ils vous permettent d'envoyer plusieurs demandes HTTP simultanément sans attendre la fin de chaque demande avant d'envoyer la suivante. De cette façon, plusieurs demandes peuvent être traitées de manière significative, en particulier lorsque plusieurs API ou sites Web doivent être demandés.

Les fonctions Curl_Multi_ * sont:

Pourquoi utiliser curl_multi_close () ?

Lorsque plusieurs demandes Curl sont exécutées à l'aide de la fonction Curl_Multi_ * , chaque demande est indépendante et chaque demande a sa propre consommation de ressources. Afin de s'assurer que ces ressources peuvent être publiées à temps une fois la demande terminée, Curl_Multi_Close () doit être appelée pour fermer la connexion.

Si vous n'utilisez pas curl_multi_close () , ces poignées Curl peuvent continuer à prendre la mémoire et d'autres ressources, provoquant des problèmes de performances et même des fuites de mémoire. Par conséquent, il est très important de fermer correctement ces connexions une fois la demande terminée.

curl_multi_close () Exemple d'utilisation

Voici un exemple montrant comment utiliser curl_multi_close () pour fermer plusieurs connexions Curl.

 <?php
// Initialiser multiple cURL Poignée
$mh = curl_multi_init();

// Définir ce qu&#39;il faut demander URL Liste
$urls = [
    "https://gitbox.net/api/endpoint1",
    "https://gitbox.net/api/endpoint2",
    "https://gitbox.net/api/endpoint3"
];

// stockage cURL Poignée
$ch_handles = [];

// Créer chacun cURL Poignée并添加到 multi Poignée中
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $ch_handles[] = $ch;
}

// Effectuez plusieurs demandes
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

// Obtenez le contenu de chaque demande et fermez-le cURL Poignée
foreach ($ch_handles as $ch) {
    $content = curl_multi_getcontent($ch);
    echo $content . "\n"; // Sortir le contenu renvoyé
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch); // Fermer chacun cURL Poignée
}

// fermeture multi Poignée
curl_multi_close($mh);
?>

Analyse de code

  1. Initialiser plusieurs poignées de boucle :

    • Utilisez curl_multi_init () pour créer une nouvelle manche multiple qui gère plusieurs requêtes Curl.

  2. Ajouter plusieurs poignées de boucle :

    • Créez une poignée CURL pour chaque URL, définissez des options pertinentes, puis ajoutez ces poignées à la manche multi-manche via curl_multi_add_handle () .

  3. Exécuter la demande :

    • Utilisez curl_multi_exec () pour exécuter toutes les demandes jusqu'à ce que toutes les demandes soient terminées.

  4. Obtenez le contenu et fermez la poignée :

    • Utilisez curl_multi_getContent () pour faire retourner le contenu par chaque poignée Curl. Une fois terminé, supprimez la poignée de la poignée multiple via Curl_Multi_Remove_Handle () et fermez chaque poignée Curl individuelle à l'aide de curl_close () .

  5. Fermez la poignée multiple :

    • Enfin, appelez curl_multi_close () pour fermer la manche multiple et libérer toutes les ressources.

résumé

L'utilisation correcte de curl_multi_close () est une étape clé pour garantir que plusieurs ressources de demande Curl sont publiées en temps opportun. Lors du traitement de plusieurs demandes en parallèle, n'oubliez pas d'appeler Curl_Multi_Close () après que chaque demande a été exécutée pour fermer toutes les connexions Curl pertinentes. Cela empêche non seulement les fuites de mémoire, mais améliore également l'efficacité du code.