Position actuelle: Accueil> Derniers articles> curl_multi_close et curl_multi_remove_handle

curl_multi_close et curl_multi_remove_handle

gitbox 2025-05-12

Les fonctions Curl_Multi_ * Série sont des outils très importants lors de l'utilisation de PHP pour des demandes HTTP simultanées. Parmi eux, curl_multi_remove_handle () et curl_multi_close () sont deux fonctions qui sont souvent utilisées mais sont sujettes à des erreurs. Une compréhension correcte de leur calendrier et des précautions d'utilisation peut éviter de nombreux pièges courants.

Qu'est-ce que curl_multi_remove_handle ()?

Le but de curl_multi_remove_handle () est de supprimer un seul curl_easy_handle qui a été ajouté au curl_multi_handle . Après le retrait, cette poignée facile peut être fermée ou réutilisée séparément, et la manche multiple ne le gérera plus.

Remarque: Lorsque vous êtes sur le point de fermer une poignée facile séparée, vous devez d'abord le retirer de la manche multi-monteurs, sinon le comportement du programme n'est pas défini.

Qu'est-ce que curl_multi_close ()?

curl_multi_close () est une fonction utilisée pour fermer l'intégralité de la manche multiple. Après l'appeler, cette manche multiple ne sera plus utilisée, et toutes les ressources liées au manche multiple seront publiées en interne. Il convient de noter qu'il ne fermera pas automatiquement la poignée facile interne, donc avant de fermer la manche multiple, vous devez vous assurer que toutes les poignées faciles ont été supprimées.

Ordre d'utilisation correcte

Un processus d'utilisation correct est généralement le suivant:

  1. Initialise les poignées multiples et plusieurs poignées faciles.

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

  3. Exécutez plusieurs manches pour traiter la demande.

  4. Une fois la demande terminée, retirez la poignée facile de la poignée multiple.

  5. Fermez chaque poignée facile.

  6. Fermer Multi Handle.

Si la commande est inversée, comme la fermeture de la manche multiple sans retirer la poignée facile, elle peut entraîner une fuite de ressources ou un crash.

Exemple de code

Voici une démonstration complète et correcte, l'URL utilise vos exigences (le nom de domaine est gitbox.net ):

 <?php

// initialisation multi handle
$mh = curl_multi_init();

// Créer deux easy handle
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

// Volonté easy handle Ajouter à multi handle
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// mettre en œuvre multi handle
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);

// Récupérer la réponse
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// Retirer easy handle
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);

// fermeture easy handle
curl_close($ch1);
curl_close($ch2);

// fermeture multi handle
curl_multi_close($mh);

// Contenu de sortie
echo $response1;
echo $response2;
?>

Résumé des conseils d'utilisation

  • Vous devez d'abord curl_multi_remove_handle () puis curl_close () manche facile.

  • Avant de fermer le manche multi-manche ( curl_multi_close ), assurez-vous que toutes les poignées faciles ont été supprimées.

  • Même si une demande de manche facile échoue, retirez-la correctement et ne la sautez pas directement.

  • L'appel Curl_Multi_Select () peut réduire efficacement l'utilisation du processeur, en particulier lorsqu'il y a une grande quantité de concurrence.

  • La manche multiple elle-même ne vous aidera pas à libérer la poignée facile. Vous devez appeler curl_close () vous-même.

Suivre ces techniques peut non seulement assurer la stabilité du programme, mais également éviter efficacement les fuites de mémoire et les déchets de ressources.