Position actuelle: Accueil> Derniers articles> Comment éviter les problèmes de connexion inattendus après Curl_Multi_Close

Comment éviter les problèmes de connexion inattendus après Curl_Multi_Close

gitbox 2025-05-29

Dans PHP, Curl est une bibliothèque très puissante qui est largement utilisée dans le traitement des demandes de réseau. Afin d'obtenir des demandes concurrentes efficaces, PHP fournit des fonctions Curl_Multi_ * , nous permettant d'initier plusieurs demandes HTTP en même temps. Parmi eux, Curl_Multi_Close est une fonction utilisée pour fermer plusieurs poignées de session Curl, mais si elle est mal utilisée, elle peut entraîner des exceptions de connexion ou une fuite de ressources. Cet article expliquera en détail comment utiliser CURL_MULTI_CLOSE correctement pour éviter de tels problèmes.

1. Présentation des fonctions de la série Curl_Multi_ *

Dans PHP, les fonctions Curl_Multi_ * Série sont utilisées pour gérer les opérations simultanées de plusieurs poignées de session Curl. CURL_MULTI_INIT est utilisé pour initialiser une collection de poignées Curl, Curl_Multi_Add_Handle est utilisée pour ajouter une seule poignée Curl à la collection, Curl_Multi_EXEC est utilisée pour exécuter toutes les sessions et les résultats de la réponse peuvent être obtenus via Curl_Multi_getContente .

2. Utilisez Curl_Multi_Close pour fermer la session

Il est très important de fermer ces séances une fois la demande simultanée terminée. curl_multi_close est utilisé pour libérer toutes les poignées initialisées dans curl_multi_init . Cependant, le synchronisation et l'ordre de fermeture de la poignée sont critiques et peuvent entraîner des exceptions de connexion si elles ne sont pas correctement opérées.

3. Meilleures pratiques pour éviter les exceptions de connexion

Pour éviter de lancer une exception de connexion après avoir utilisé CURL_MULTI_CLOSE , nous devons suivre les meilleures pratiques suivantes:

3.1 Assurez-vous que curl_multi_exec est terminé

Avant d'appeler CURL_MULTI_CLOSE , vous devez d'abord vous assurer que toutes les demandes Curl ont été remplies. Vous pouvez vérifier en permanence si toutes les demandes ont été traitées via CURL_MULTI_EXEC .

 $multi_handle = curl_multi_init();
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('https://gitbox.net/api/endpoint2');

// Ajouter une poignée
curl_multi_add_handle($multi_handle, $ch1);
curl_multi_add_handle($multi_handle, $ch2);

// Exécuter une demande
$running = null;
do {
    curl_multi_exec($multi_handle, $running);
} while ($running > 0);

// Obtenir des résultats
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// Fermez la poignée
curl_multi_remove_handle($multi_handle, $ch1);
curl_multi_remove_handle($multi_handle, $ch2);

// Libérer les ressources
curl_multi_close($multi_handle);

Dans le code ci-dessus, nous utilisons CURL_MULTI_EXEC pour nous assurer que toutes les demandes ont été remplies. CURL_MULTI_CLOSE est appelé pour fermer la session Curl multiple uniquement une fois toutes les demandes terminées.

3.2 Retirez correctement la poignée

Avant d'appeler CURL_MULTI_CLOSE , nous devons nous assurer de supprimer toutes les poignées Curl via Curl_Multi_Remove_Handle . Si ces poignées ne sont pas supprimées correctement, des fuites de connexion ou des exceptions peuvent se produire.

 curl_multi_remove_handle($multi_handle, $ch1);
curl_multi_remove_handle($multi_handle, $ch2);

3.3 Erreurs de traitement et délais d'expiration

Les erreurs et les délais d'expiration sont des problèmes courants pour les demandes simultanées. Nous pouvons utiliser Curl_getInfo et Curl_errno pour vérifier l'état de chaque demande pour s'assurer que toutes les erreurs possibles sont traitées avant de fermer la connexion.

 if (curl_errno($ch1)) {
    echo 'Error: ' . curl_error($ch1);
} else {
    echo 'Response 1: ' . $response1;
}

if (curl_errno($ch2)) {
    echo 'Error: ' . curl_error($ch2);
} else {
    echo 'Response 2: ' . $response2;
}

4. Résumé

Une utilisation appropriée de curl_multi_close garantit que les demandes simultanées des programmes PHP peuvent être fermées efficacement sans lancer des exceptions de connexion. N'oubliez pas, avant d'appeler curl_multi_close :

  1. Assurez-vous que toutes les demandes ont été remplies;

  2. Retirez correctement toutes les poignées;

  3. Erreurs et délais d'expiration pour les demandes de traitement.

En suivant ces meilleures pratiques, vous pouvez éviter les exceptions de connexion causées par Curl_Multi_Close fermant plusieurs sessions Curl et améliorer la stabilité et l'efficacité du programme.