Position actuelle: Accueil> Derniers articles> Comment déboguer les erreurs dans la session Curl après Curl_close?

Comment déboguer les erreurs dans la session Curl après Curl_close?

gitbox 2025-05-26

Lorsque vous utilisez l'extension Curl de PHP pour les demandes de réseau, les développeurs appellent souvent Curl_close () pour fermer une session Curl. Mais beaucoup de gens rencontrent ce problème lors du débogage:. Étant donné qu'une fois Curl_close () , les ressources liées à la session seront publiées, y compris les messages d'erreur.

Cet article expliquera comment obtenir et déboguer les erreurs possibles dans Curl avant de clôturer une session, et fournir des suggestions pratiques et un exemple de code.

Pourquoi le message d'erreur doit-il être obtenu avant curl_close () ?

curl_close () libère la poignée Curl créée par Curl_Init () . Une fois libéré, vous ne pourrez plus appeler curl_error () ou curl_errno () pour afficher le message d'erreur. Cela nous oblige à obtenir des informations d'erreur à temps pour le débogage ou l'enregistrement avant de fermer la poignée.

Ordre de débogage correct

Ce qui suit est un processus de demande standard, faites attention au moment de l'obtention d'informations d'erreur:

 <?php

$url = "https://gitbox.net/api/data";

// initialisation cURL Session
$ch = curl_init();

// installation cURL Options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Exécuter une demande
$response = curl_exec($ch);

// 在fermetureSession前获取erreur信息
if (curl_errno($ch)) {
    $errorCode = curl_errno($ch);
    $errorMessage = curl_error($ch);
    error_log("cURL erreur [$errorCode]: $errorMessage");
} else {
    // Réponse de traitement
    echo "Contenu de réponse: " . $response;
}

// fermeture cURL Session
curl_close($ch);

Autres compétences de débogage

En plus de curl_error () et curl_errno () , vous pouvez également utiliser les méthodes suivantes pour déboguer davantage:

1. Activer les informations de débogage détaillées

Vous pouvez définir Curlopt_verbose sur true , afin que PHP puisse sortir les informations détaillées du processus de demande à la sortie d'erreur standard, qui convient au débogage en mode CLI:

 curl_setopt($ch, CURLOPT_VERBOSE, true);

Si vous souhaitez rédiger des informations verbeuses dans le fichier journal:

 $verbose = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $verbose);

Une fois la demande terminée, le contenu du journal peut être lu:

 rewind($verbose);
$verboseLog = stream_get_contents($verbose);
error_log("cURL Informations de débogage: \n" . $verboseLog);

2. Vérifiez le code d'état HTTP

Parfois, la demande elle-même n'a pas d'erreur de réseau, mais le serveur renvoie le mauvais code d'état HTTP. Vous pouvez le vérifier par:

 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
    error_log("HTTP Code d&#39;état: $httpCode");
}

3. Utilisez des fonctions de capture d'essai et d'encapsulation

Pour faciliter le multiplexage et la capture d'erreur, les demandes de boucle peuvent être encapsulées en une fonction:

 function fetchData($url) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
    ]);

    $response = curl_exec($ch);

    if (curl_errno($ch)) {
        $error = curl_error($ch);
        curl_close($ch);
        throw new Exception("cURL Échec de la demande: " . $error);
    }

    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode !== 200) {
        throw new Exception("HTTP Code d&#39;étaterreur: " . $httpCode);
    }

    return $response;
}

try {
    $data = fetchData("https://gitbox.net/api/data");
    echo "Réussir: $data";
} catch (Exception $e) {
    error_log("Capture d&#39;exception: " . $e->getMessage());
}

Résumer

Lorsque vous utilisez Curl de PHP pour les demandes de réseau, la clé du débogage est d'obtenir des informations d'erreur à temps avant de fermer la session . En utilisant rationnellement des outils tels que curl_errno () , curl_error () , curl_getinfo () et curlopt_verbose , les développeurs peuvent localiser efficacement les problèmes et améliorer la stabilité du programme. N'oubliez pas de ne pas essayer d'obtenir des erreurs ou de déboguer des informations après Curl_close () , car il était trop tard d'ici là.