Dans PHP, Curl est une bibliothèque très puissante pour envoyer des demandes HTTP et des réponses de traitement. Lorsque nous faisons des demandes simultanées, nous utilisons généralement la fonction Curl_Multi_ * pour effectuer le multithreading. Les erreurs de débogage et de dépannage deviennent particulièrement importantes à mesure que le nombre de demandes augmente. Cet article explorera comment utiliser la fonction curl_multi_close et Curl_error pour dépanner efficacement les erreurs dans les demandes multithread.
Les fonctions Curl_Multi_ * Série sont des fonctions dans PHP qui initient simultanément plusieurs demandes HTTP. Contrairement à un seul curl_exec , Curl_Multi_ * peut exécuter plusieurs demandes en même temps et traiter leurs réponses. Ses fonctions de base incluent:
curl_multi_init () : initialisez une curl plusieurs poignées
curl_multi_add_handle () : ajoutez une seule poignée à plusieurs poignées
curl_multi_exec () : exécute toutes les demandes de curl ajoutées
curl_multi_getContent () : Obtenez le contenu de la réponse de chaque demande Curl
curl_multi_remove_handle () : supprime une seule poignée de plusieurs poignées
curl_multi_close () : fermer toutes les demandes de curl
CURL_MULTI_CLOSE est principalement utilisé pour fermer les ressources multi-mains après que toutes les demandes soient exécutées, tandis que Curl_error est utilisé pour obtenir des informations d'erreur dans les demandes Curl. Dans les demandes multipliées, plusieurs demandes sont généralement traitées en même temps et les erreurs peuvent ne pas apparaître immédiatement. En combinant raisonnablement ces deux fonctions, nous pouvons nous aider à attraper et à dépanner les erreurs.
Tout d'abord, nous devons initialiser les multiples manchettes de boucle et créer une poignée de boucle indépendante pour chaque demande.
$mh = curl_multi_init(); // Initialiser plusieurs poignées
$urls = [
"https://example.com/api/endpoint1",
"https://example.com/api/endpoint2",
"https://example.com/api/endpoint3",
];
$curlHandles = [];
foreach ($urls as $index => $url) {
$ch = curl_init($url); // Initialiser un seul cURL Poignée
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curlHandles[$index] = $ch;
curl_multi_add_handle($mh, $ch); // 将Poignée添加到多Poignée中
}
Utilisez CURL_MULTI_EXEC pour exécuter toutes les demandes et surveiller leur état d'exécution.
$running = null;
do {
curl_multi_exec($mh, $running); // Exécuter une demande
curl_multi_select($mh); // Attendez que l'opération se termine
} while ($running > 0);
Une fois toutes les demandes terminées, nous pouvons obtenir le contenu de la réponse de chaque demande via CURL_MULTI_GETCONTENT et utiliser Curl_error pour vérifier si des demandes ont échoué.
foreach ($curlHandles as $index => $ch) {
$response = curl_multi_getcontent($ch); // Obtenez le contenu de la réponse
if (curl_errno($ch)) {
// Capture du message d'erreur
$error_msg = curl_error($ch);
echo "demander {$urls[$index]} Une erreur s'est produite: $error_msg\n";
} else {
echo "demander {$urls[$index]} succès,Contenu de réponse: $response\n";
}
curl_multi_remove_handle($mh, $ch); // 从多Poignée中移除
curl_close($ch); // 关闭单个Poignée
}
Enfin, utilisez CURL_MULTI_CLOSE pour fermer plusieurs poignées et libérer des ressources.
curl_multi_close($mh); // 关闭多Poignée
Supposons que nous ayons une liste des demandes d'API et lors du traitement simultanément, nous pouvons rencontrer certaines défaillances de la demande. Grâce à la méthode ci-dessus, nous pouvons attraper l'erreur et imprimer le message d'erreur. Les erreurs communes incluent la défaillance de la résolution DNS, le délai d'expiration de la connexion, etc. Habituellement, Curl_error peut nous aider à identifier la cause spécifique de l'erreur.
L'utilisation de curl_multi_close et curl_error pour coopérer avec les erreurs de vérification des demandes multi-thread est une méthode de débogage très efficace. En capturant raisonnablement les informations d'erreur pour chaque demande, nous pouvons rapidement localiser et résoudre les problèmes qui surviennent dans les demandes simultanées. Il convient de noter que lors de la gestion des demandes simultanées, essayez de garder le code clair et concis et d'éviter la nidification excessive et le code en double.