Position actuelle: Accueil> Derniers articles> Comment gérer le cycle de vie de plusieurs ressources Curl après avoir utilisé Curl_close?

Comment gérer le cycle de vie de plusieurs ressources Curl après avoir utilisé Curl_close?

gitbox 2025-05-26

Après avoir créé une poignée Curl avec curl_init () , la ressource occupera la mémoire du système. Une fois la demande terminée, appeler Curl_close () peut libérer la ressource.

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

Remarque: Après l'appel Curl_close , la poignée de ressources Curl ne peut pas être utilisée, sinon une erreur sera signalée.

2. Schéma de gestion pour plusieurs ressources en boucle

Lorsque vous devez traiter plusieurs demandes en même temps, vous pouvez créer plusieurs poignées de curl:

 $urls = [
    'https://gitbox.net/api/user',
    'https://gitbox.net/api/product',
    'https://gitbox.net/api/order',
];

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

Ici, nous stockons toutes les poignées dans le tableau $ curlhandles pour une gestion unifiée facile.

3. Libérer manuellement plusieurs ressources

Après avoir terminé la demande, il doit être publié un par un:

 foreach ($curlHandles as $ch) {
    $response = curl_exec($ch);
    // traiter avec $response ...

    curl_close($ch);  // Libérez chaque poignée
}

Cela garantit que chaque poignée est fermée correctement et évite la fuite des ressources.

4. Utilisez Curl_Multi pour les demandes de processus par lots

PHP fournit une extension Curl_Multi , qui peut gérer plusieurs poignées Curl en même temps, ce qui le rend plus efficace.

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

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

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

foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    // traiter avec $response ...

    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh);

Ici, CURL_MULTI_CLOSE publie la ressource Multi-Handle Manager, tandis que CURL_CLOSE publie une ressource unique.

5. Résumé et points de note

  • Assurez-vous d'appeler Curl_close pour libérer une seule poignée de boucle.

  • Lorsque vous utilisez CURL_MULTI , utilisez d'abord Curl_Multi_Remove_Handle pour supprimer la poignée, puis appelez Curl_close .

  • Évitez de réutiliser la poignée après avoir appelé CURL_CLOSE .

  • Lorsque vous gérez plusieurs poignées, utilisez des tableaux pour les stocker de manière unifiée pour faciliter la libération par lots.

  • Après avoir libéré des ressources, essayez de détruire les références variables (par exemple, en utilisant unset ) afin que la collecte de déchets PHP soit plus efficace.

La gestion correcte de plusieurs ressources en boucle peut améliorer considérablement la stabilité du programme et l'efficacité d'utilisation de la mémoire.