Lorsque vous utilisez CURL, nous devons d'abord créer une session Curl et utiliser Curl_Init () pour initialiser une poignée Curl. Cette poignée contient les informations liées à la connexion pendant le processus de demande. Une fois la demande terminée, nous utilisons généralement Curl_close () pour fermer la poignée et libérer les ressources système.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data"); // Configurer une demande URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Définissez le résultat de retour sur une chaîne
$response = curl_exec($ch); // Exécutez une demande et obtenez une réponse
curl_close($ch); // Fermez la session
Dans le code ci-dessus, une nouvelle session Curl est créée chaque fois qu'une demande est lancée, et Curl_close () est appelée une fois la demande terminée pour clôturer la session. Cela est nécessaire car chaque session Curl prendra une certaine quantité de ressources, et Curl_close () peut être utilisée pour libérer ces ressources.
Dans le développement réel, il peut y avoir des scénarios où plusieurs demandes doivent être exécutées. Si curl_close () est appelé immédiatement une fois chaque demande terminée, elle entraînera la fermeture de la connexion à plusieurs reprises à chaque fois, gaspillant les ressources système. Pour éviter cela, c'est généralement un moyen de multiplexer les séances de boucle, partageant une poignée de session entre plusieurs demandes jusqu'à ce que toutes les demandes soient remplies avant de fermer la session uniformément.
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Définissez le résultat de retour sur une chaîne
// demander 1
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
$response1 = curl_exec($ch);
// demander 2
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
$response2 = curl_exec($ch);
// demander 3
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint3");
$response3 = curl_exec($ch);
curl_close($ch); // 一次性Fermez la session
Dans cet exemple, toutes les demandes partagent une poignée de session CURL $ ch et curl_close () ne s'appelle que une fois toutes les demandes terminées. Cela évite la création et la destruction répétées des séances, réduisant ainsi les frais généraux de ressources inutiles.
Si vous devez lancer plusieurs demandes en même temps, l'utilisation de la fonction Curl_Multi_ * pour traiter plusieurs sessions Curl en parallèle est une manière plus efficace. De cette façon, vous pouvez éviter plusieurs appels vers Curl_close () et mieux gérer plusieurs ressources demandées.
$mh = curl_multi_init(); // Initialiser plusieurs poignées
$ch1 = curl_init();
$ch2 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1); // Ajouter une poignée à plusieurs poignées
curl_multi_add_handle($mh, $ch2);
do {
curl_multi_exec($mh, $active); // 执行demander
} while ($active > 0);
$response1 = curl_multi_getcontent($ch1); // Obtenir une réponse
$response2 = curl_multi_getcontent($ch2);
curl_multi_remove_handle($mh, $ch1); // Retirer la poignée de plusieurs poignées
curl_multi_remove_handle($mh, $ch2);
curl_close($ch1); // Fermez la poignée
curl_close($ch2);
curl_multi_close($mh); // Fermer plusieurs poignées
Dans cette approche, plusieurs sessions Curl sont exécutées en parallèle via la fonction Curl_Multi_ * . Chaque ressource demandée n'est clôturée qu'une seule fois après l'achèvement, améliorant ainsi l'efficacité d'exécution du programme et garantissant que chaque ressource demandée est correctement publiée.
Bien que l'utilisation de curl_close () puisse éviter correctement la fuite des ressources, vous pouvez également rencontrer des défaillances de la demande lors de l'exécution des demandes Curl. Si une erreur se produit, il est essentiel de s'assurer que la ressource est correctement libérée à chaque demande. Vous pouvez vérifier Curl_errno () pour déterminer si la demande est réussie. S'il échoue, le traitement d'erreur correspondant sera effectué.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/invalid-endpoint");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if(curl_errno($ch)) {
// demander失败时的处理
echo "cURL Error: " . curl_error($ch);
} else {
// demander成功时的处理
echo "Response: " . $response;
}
curl_close($ch); // 即使demander失败,Assurez-vous également la libération des ressources
L'utilisation correcte de la fonction curl_close () peut efficacement libérer les ressources occupées par les séances CURL et éviter les problèmes de performances causés par les appels répétés. Le partage de la même session entre plusieurs demandes, ou l'utilisation de la fonction Curl_Multi_ * pour le traitement parallèle peut réduire la fréquence de plusieurs appels à curl_close () , améliorant ainsi l'efficacité de l'exécution du programme et la gestion des ressources. De plus, la gestion des erreurs et la libération des ressources sont tout aussi importantes, garantissant que les ressources sont correctement libérées à chaque demande, en évitant les fuites de mémoire ou d'autres problèmes.