Position actuelle: Accueil> Derniers articles> Comment mettre fin à plusieurs demandes simultanées en utilisant Curl_close dans un seul script?

Comment mettre fin à plusieurs demandes simultanées en utilisant Curl_close dans un seul script?

gitbox 2025-05-26

Curl est un outil très courant et puissant lors de l'utilisation de PHP pour gérer les demandes HTTP simultanées. Pour améliorer l'efficacité, nous utilisons généralement la série de fonctions Curl_Multi_ * pour initier plusieurs demandes simultanées. Après avoir rempli toutes les demandes, il est très important de fermer correctement chaque poignée de demande, ce qui est exactement ce que fait curl_close () . Cet article expliquera en détail comment utiliser curl_close () avec curl_multi_exec ( ) dans un script PHP pour mettre fin à plusieurs demandes simultanées.

Préparation de base: lancez plusieurs demandes

Tout d'abord, nous devons créer plusieurs poignées Curl et les ajouter à une ressource multi-mains via curl_multi_add_handle () .

 $urls = [
    "https://gitbox.net/api/service1",
    "https://gitbox.net/api/service2",
    "https://gitbox.net/api/service3"
];

$multiHandle = curl_multi_init();
$curlHandles = [];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[] = $ch;
}

Dans ce code, nous ajoutons trois URL sous forme de trois poignées de demande Curl distinctes et les ajoutons à une ressource multi-manche à plusieurs gardiens .

Effectuer des demandes simultanées

Après avoir ajouté toutes les poignées, nous gérons l'exécution de ces demandes via Curl_Multi_Exec () et Curl_Multi_Select () :

 $running = null;
do {
    curl_multi_exec($multiHandle, $running);
    curl_multi_select($multiHandle);
} while ($running > 0);

Cette boucle continuera à s'exécuter jusqu'à ce que toutes les demandes simultanées soient remplies. curl_multi_exec () initie en fait la demande, tandis que Curl_Multi_Select () est utilisé pour attendre la connexion active pour éviter le ralenti du CPU.

Obtenir du contenu de réponse (facultatif)

Une fois l'exécution terminée, vous voudrez peut-être obtenir le résultat de chaque demande:

 $responses = [];
foreach ($curlHandles as $ch) {
    $responses[] = curl_multi_getcontent($ch);
}

Fermez la poignée: utilisez curl_close ()

Une fois la demande terminée, nous devons nous assurer que toutes les ressources sont publiées, y compris chaque poignée de demande de boucle et la ressource multi-manche elle-même. C'est là que curl_close () entre en jeu:

 foreach ($curlHandles as $ch) {
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

curl_multi_close($multiHandle);

Dans le code ci-dessus, nous utilisons curl_multi_remove_handle () un par un pour supprimer chaque poignée de la ressource multi-mains, puis utiliser Curl_close () pour les fermer, et enfin fermer la ressource multi-mains elle-même.

résumé

L'utilisation de curl_close () pour libérer correctement les ressources est une étape qui ne peut pas être ignorée après le traitement des demandes simultanées. Ce qui suit est un résumé complet du processus de traitement:

  1. Initialiser plusieurs poignées de demande Curl;

  2. Ajoutez une poignée à une ressource à plusieurs manches;

  3. Utilisez curl_multi_exec () pour traiter les demandes simultanées;

  4. Utilisez curl_multi_getContent () pour obtenir le résultat (facultatif);

  5. Utilisez curl_close () et curl_multi_close () pour fermer toutes les poignées et ressources.

Grâce aux méthodes ci-dessus, vous pouvez gérer efficacement et gracieusement plusieurs demandes simultanées dans un seul script PHP pour garantir que les ressources système ne sont pas gaspillées.