Position actuelle: Accueil> Derniers articles> Comment gérer correctement les demandes multiburl en PHP et se terminer avec Curl_close?

Comment gérer correctement les demandes multiburl en PHP et se terminer avec Curl_close?

gitbox 2025-05-18

Dans PHP, Curl est une bibliothèque puissante pour effectuer des demandes de réseau telles que l'accès aux API REST ou les pages Web rampantes. Lors du traitement d'une seule demande CURL, il s'agit d'un processus standard pour initialiser la poignée à l'aide de curl_init () , curl_exec () exécuter la demande et enfin libérer la ressource via curl_close () . Cependant, lors de la gestion de plusieurs demandes simultanées, en particulier lors de l'utilisation de fonctions Curl_Multi_ * , il est particulièrement important de fermer correctement et de nettoyer les ressources. Ne pas le faire peut entraîner des fuites de mémoire ou des problèmes de connexion réseau.

1. Examen du processus de demande de boucle de base

Dans une seule demande, le code typique est le suivant:

 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch); // Libérez correctement les ressources

Ici, Curl_close ($ ch) est requis. Il ferme la poignée Curl créée par Curl_Init () et libère les ressources pertinentes.

2. Façons courantes de gérer plusieurs demandes

Pour les scénarios où plusieurs demandes sont nécessaires pour lancer plusieurs demandes en même temps, PHP fournit une interface Curl_Multi_ * . Les exemples sont les suivants:

 $urls = [
    'https://gitbox.net/api/one',
    'https://gitbox.net/api/two',
    'https://gitbox.net/api/three',
];

$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;
}

// Effectuez toutes les demandes
$running = null;
do {
    curl_multi_exec($multiHandle, $running);
    curl_multi_select($multiHandle);
} while ($running > 0);

// Obtenir des résultats
$responses = [];
foreach ($curlHandles as $ch) {
    $responses[] = curl_multi_getcontent($ch);
}

À l'heure actuelle, si vous n'exécutez pas l'étape suivante Curl_Multi_Remove_Handle et Curl_Close , la ressource n'est pas publiée.

3. Libérez correctement plusieurs ressources demandées

Une fois que toutes les demandes ont été exécutées et que la réponse est récupérée, chaque poignée doit être nettoyée:

 foreach ($curlHandles as $ch) {
    curl_multi_remove_handle($multiHandle, $ch); // depuis multi handle Enlevé
    curl_close($ch); // Fermer un seul cURL Poignée,Libérer les ressources
}

curl_multi_close($multiHandle); // Dernière clôture multi handle

Il s'agit d'une étape critique pour s'assurer que toutes les ressources sont libérées. Il ne suffit pas de simplement désactiver Curl_Multi_close () sans appeler curl_close () un par un.

4. meilleures pratiques et suggestions

  1. Soulgé explicitement : qu'il s'agisse d'une demande unique ou multiple, n'oubliez pas d'utiliser Curl_close () .

  2. Utilisez TRY-final ou Gestion des erreurs : il peut y avoir des exceptions pendant le traitement. Il est recommandé d'utiliser la structure try-finalement pour s'assurer que la poignée est enfin libérée.

  3. Nombre de mémoire et de connexion sur le moniteur : Dans des environnements de concurrence élevés, les poignées de boucle inédites peuvent rapidement conduire à l'épuisement des ressources.

  4. Logique de la demande d'encapsulation : il est recommandé de le résumer dans une fonction ou une classe pour gérer la version des ressources en interne pour éviter les omissions.

5. Résumé

curl_close () n'est pas facultatif dans PHP, en particulier dans plusieurs scénarios de demande. L'utilisation correcte de curl_multi_remove_handle () et curl_close () peut garantir la stabilité et les performances du système. Après avoir écrit la logique de demande, n'oubliez pas cette étape: le nettoyage des ressources à temps est la meilleure optimisation des performances.