Position actuelle: Accueil> Derniers articles> Php curl_multi_close résout des problèmes communs avec Curl_Multi_Init

Php curl_multi_close résout des problèmes communs avec Curl_Multi_Init

gitbox 2025-05-29

Dans PHP, la série de fonctions Curl_Multi_ * est utilisée pour exécuter des demandes Curl simultanées, ce qui peut nous aider à gérer plusieurs demandes HTTP simultanément. Lorsque nous terminons la demande simultanée, nous devons utiliser CURL_MULTI_CLOSE pour fermer la poignée Curl, ce qui est généralement effectué après que toutes les demandes simultanées sont exécutées. Dans cet article, nous explorerons comment utiliser CURL_MULTI_CLOSE , les erreurs courantes et comment les résoudre.

Utilisation de curl_multi_close

La fonction CURL_MULTI_CLOSE est utilisée pour fermer le Curl multi-mains initialisé par Curl_Multi_Init . Sa fonction est de nettoyer les ressources connexes et d'éviter les fuites de mémoire. Lorsque nous l'utilisons, nous utilisons généralement CURL_MULTI_INIT pour initialiser une poignée Curl multiple et appeler CURL_MULTI_CLOSE Une fois que toutes les demandes sont exécutées pour fermer la poignée.

Exemple de code

 <?php
// initialisationcURLPlusieurs poignées
$mh = curl_multi_init();

// initialisationcURLPoignée unique
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/v1/data1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/v1/data2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

// 将Poignée添加到Plusieurs poignées中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// Exécuter plusieurscURLdemander
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

// fermeturecURLPoignée
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

// fermeture单个cURLPoignée
curl_close($ch1);
curl_close($ch2);

echo "demander完成!";
?>

Dans l'exemple ci-dessus, CURL_MULTI_INIT initialise un $ MAH à plusieurs manches, puis nous créons deux poignées Curl distinctes $ ch1 et $ ch2 . Ces deux poignées sont ajoutées à $ MH via CURL_MULTI_ADD_HANDLE et plusieurs demandes HTTP sont effectuées. Enfin, utilisez CURL_MULTI_REMOVE_HANDLE pour supprimer ces poignées, et appelez Curl_Multi_Close pour fermer les multiples poignées et nettoyer les ressources pertinentes.

Erreurs et solutions communes pour curl_multi_init

Bien que Curl_Multi_Close soit simple, vous rencontrerez également certains problèmes et erreurs courants lorsque vous l'utiliserez avec Curl_Multi_Init . Ensuite, nous discuterons de ces erreurs courantes et de leurs solutions.

1. Erreur: la poignée multiple bouclée n'est pas initialisée correctement

Description de l'erreur: Parfois, nous pouvons oublier d'appeler Curl_Multi_Init pour initialiser plusieurs poignées et commencer à ajouter directement des poignées.

Solution: assurez-vous que les multiples poignées ont été correctement initialisées avant d'appeler CURL_MULTI_ADD_HANDLE . N'oubliez pas non plus d'utiliser CURL_MULTI_CLOSE pour le nettoyer à la fin.

 <?php
$mh = curl_multi_init(); // 确保已经initialisation

// Autres codes...
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// 最后fermeture
curl_multi_close($mh);
?>

2. Erreur: toutes les poignées ne sont pas fermées correctement

Description de l'erreur: Les fuites de ressources peuvent se produire si Curl_Multi_Remove_Handle n'est pas correctement appelée une fois toutes les demandes terminées, ou si Curl_Multi_Close n'est pas utilisée pour fermer plusieurs poignées.

Solution: assurez-vous que chaque poignée de boucle individuelle ajoutée à la poignée multiple est supprimée et Curl_Multi_Close est appelée à la fin.

 <?php
// 确保移除所有Poignée
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);  // Nettoyer les ressources
?>

3. Erreur: demande multiple non terminée

Description de l'erreur: Lors de l'exécution de plusieurs demandes Curl, si Curl_Multi_Close n'attend pas toutes les demandes à compléter, vous pouvez rencontrer le problème que la demande n'est pas entièrement exécutée.

Solution: utilisez la boucle CURL_MULTI_EXEC pour vous assurer que toutes les demandes sont remplies. CURL_MULTI_EXEC sera exécuté jusqu'à ce que toutes les demandes soient remplies.

 <?php
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);  // 等待所有demander完成

curl_multi_close($mh);  // fermeturePlusieurs poignées
?>

Résumer

CURL_MULTI_CLOSE est une étape qui ne peut pas être ignorée lors de la gestion de plusieurs requêtes Curl. Il garantit qu'une fois la demande simultanée terminée, les ressources pertinentes peuvent être publiées. Lorsqu'ils sont utilisés avec Curl_Multi_Init , les erreurs courantes se concentrent principalement sur l'initialisation et le nettoyage des ressources. La plupart des erreurs peuvent être évitées en vérifiant soigneusement le code et en s'assurant que chaque étape est correctement exécutée.

J'espère que cet article vous aidera à mieux comprendre et utiliser Curl_Multi_Close et Curl_Multi_Init . Si vous avez plus de questions, veuillez laisser un message à discuter!