Position actuelle: Accueil> Derniers articles> Comment nettoyer le pool de connexions avec Curl_close une fois la demande Curl terminée?

Comment nettoyer le pool de connexions avec Curl_close une fois la demande Curl terminée?

gitbox 2025-05-15

C'est une façon courante d'utiliser Curl (Client URL Library) dans PHP pour les demandes de réseau. Qu'il s'agisse d'envoyer une demande GET pour explorer le contenu de la page ou de soumettre des données via une demande post, Curl fournit une interface fonctionnelle riche et flexible. Lorsque vous utilisez ces fonctions, la fermeture et le nettoyage des ressources de connexion en temps opportun sont un lien clé pour garantir les performances et la stabilité du programme. Cet article se concentrera sur la façon de fermer correctement la poignée et de libérer la ressource à l'aide de la fonction curl_close une fois la demande terminée.

1. Introduction à Curl

Curl est un outil puissant pour interagir avec les serveurs dans les scripts PHP pour HTTP, HTTPS, FTP et d'autres protocoles. En initialisant une session Curl, en définissant diverses options, en exécutant les demandes et en obtenant des résultats de retour, les développeurs peuvent implémenter diverses opérations de communication réseau complexes.

2. Pourquoi utiliser curl_close?

Chaque poignée CURL créée via Curl_init est allouée à certaines ressources système. Si Curl_close n'est pas appelé pour fermer cette poignée une fois la demande terminée, ces ressources ne seront pas publiées, provoquant des fuites de mémoire ou un épuisement du pool de connexion.

Dans des scénarios de concurrence élevés, ce problème est encore plus grave et peut entraîner des accidents de service. Par conséquent, que la demande réussit ou échoue, assurez-vous d'appeler Curl_close après la fin de la poignée et de libérer la ressource .

3. Exemples de base de l'utilisation de curl_close

Voici un processus de demande Curl typique qui montre comment utiliser Curl_close correctement:

 <?php

// initialisation cURL Session
$ch = curl_init();

// Définition de la cible URL
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Exécuter une demande
$response = curl_exec($ch);

// Vérifiez si la demande est erronée
if (curl_errno($ch)) {
    echo 'Demander une erreur: ' . curl_error($ch);
} else {
    echo 'Contenu de réponse: ' . $response;
}

// fermetureSession并释放资源
curl_close($ch);
?>

Dans l'exemple ci-dessus, Curl_close ($ ch) est la dernière étape de l'ensemble du processus de demande, garantissant que le programme ne conserve pas de connexions inutiles.

4. La relation entre le multiplexage de connexion et Curl_close

Le php-curl moderne prend en charge la réutilisation de la connexion, en particulier dans les scénarios où l'interface Curl_Multi ou le multiplexage HTTP / 2 sont activées. Si vous activez l'option de connexion persistante, par exemple:

 curl_setopt($ch, CURLOPT_FORBID_REUSE, false);

À l'heure actuelle, la connexion peut être placée dans le pool de connexions et attendre la réutilisation. Mais veuillez noter que la gestion d'un pool de connexions n'est pas la même que la gestion des poignées . Même si la connexion sous-jacente est réutilisée, Curl_close est toujours une opération qui doit être effectuée et elle est responsable de la destruction des structures de données liées à la poignée dans l'espace utilisateur.

5. Choses à noter lors de la coopération avec Curl_Multi

Si vous utilisez Curl_Multi_Init Multi-Handle Concurrent Request Method, vous devez également fermer toutes les poignées à leur tour une fois l'opération terminée:

 $mh = curl_multi_init();
$ch1 = curl_init("https://gitbox.net/api/one");
$ch2 = curl_init("https://gitbox.net/api/two");

curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// Effectuer des demandes simultanées
do {
    $status = curl_multi_exec($mh, $active);
    curl_multi_select($mh);
} while ($active && $status == CURLM_OK);

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

// Retirer et fermer la poignée
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_close($ch1);
curl_close($ch2);

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

Il est particulièrement souligné ici: assurez-vous que toutes les opérations ont été terminées avant de retirer la poignée, sinon un comportement non défini peut se produire.

6. Résumé

Lorsque vous utilisez CURL, appeler Curl_close dans le temps pour libérer les ressources est une exigence de base pour écrire des applications PHP robustes. Alors que les versions modernes de PHP et de systèmes d'exploitation peuvent recycler automatiquement les ressources à la fin d'un processus, se fier au recyclage du système est une pratique dangereuse. La fermeture active des ressources peut non seulement améliorer la stabilité du programme, mais également aider à localiser les problèmes et à optimiser les performances.

Dans le cas des demandes à haute fréquence, de l'exécution simultanée des tâches et de l'appel des API externes, les développeurs devraient inclure Curl_close comme étape non ouverte dans le processus standard.

Grâce à de bonnes habitudes de gestion des ressources, nous pouvons éviter de nombreux problèmes cachés et rendre les applications PHP plus robustes et plus efficaces.