Lorsque vous utilisez les fonctions de la série Curl_Multi_ * de PHP, Curl_Multi_Close est utilisée pour fermer une poignée créée par Curl_Multi_Init . Mais de nombreux développeurs seront confus avant d'appeler curl_multi_close :
La réponse est: elle n'est généralement pas nécessaire, mais c'est toujours une bonne habitude de gérer raisonnablement les ressources.
Selon la documentation PHP officielle, la fonction de Curl_Multi_Close est de détruire une manche multi-multiples et de libérer automatiquement les ressources associées à la manche multiple. Cependant, il ne ferme pas automatiquement les poignées Curl individuelles créées par Curl_init et ajoutées à la manche multiple. Vous devez fermer manuellement chaque poignée Curl individuelle à l'aide de Curl_close avant d'appeler Curl_Multi_Close .
Si vous ne le faites pas, ces poignées de boucle séparées occupent toujours des ressources de mémoire, ce qui peut conduire à des fuites de mémoire.
Voici un exemple de PHP qui gère correctement les multiples poignées et les poignées de boucle unique:
<?php
// Initialiser multiple curl Poignée
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('https://gitbox.net/api/endpoint2');
// Créer un curl_multi Poignée
$mh = curl_multi_init();
// 添加Poignée到 multi handle
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// mettre en œuvre
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// 移除Poignée
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// 关闭单个Poignée
curl_close($ch1);
curl_close($ch2);
// Dernière clôture multi handle
curl_multi_close($mh);
?>
Dans le code ci-dessus:
Utilisez d'abord Curl_Multi_Remove_Handle pour supprimer une seule poignée de la poignée multiple;
Puis curl_close ferme individuellement chaque poignée Curl;
Enfin, utilisez CURL_MULTI_CLOSE pour fermer la manche multiple elle-même.
Cela garantit que toutes les ressources sont libérées correctement sans poignées héritées ni fuites de mémoire.
curl_multi_close n'est responsable que de la destruction de la manche multiple elle-même;
Une seule poignée en boucle vous oblige à fermer manuellement;
Il n'est pas nécessaire de vérifier le "statut" de la poignée, mais il est nécessaire de s'assurer que chaque poignée de boucle individuelle est supprimée et fermée ;
Le développement de bonnes habitudes de gestion des ressources est la clé pour éviter les fuites de mémoire et le gaspillage des ressources système.