Aktueller Standort: Startseite> Neueste Artikel> Wie kann ich Debugging -Informationen nach dem Ende einer Curl -Sitzung mit curl_close angezeigt?

Wie kann ich Debugging -Informationen nach dem Ende einer Curl -Sitzung mit curl_close angezeigt?

gitbox 2025-05-26

Bei Verwendung der Curl -Erweiterung von PHP für HTTP -Anforderungen ist Curl_Close () eine häufig verwendete Funktion für freie Ressourcen, nachdem die Anforderung abgeschlossen ist. Wenn Entwickler jedoch Anfragen oder Probleme mit der Fehlerbehebung debuggen, möchten sie häufig detaillierte Informationen während des Anfrageprozesses wie DNS -Auflösungszeit, Verbindungszeit, Antwortheader usw. erhalten, dann lautet die Frage:

1. curl_getInfo muss vor curl_close aufgerufen werden

PHP liefert die Funktion curl_getInfo () , um die Betriebsinformationen eines Curl -Handels wie HTTP -Statuscode, Gesamtzeitverbrauch, Anzahl der Sprünge usw. zu erhalten. Beachten Sie jedoch, dass diese Funktion vor curl_close () aufgerufen werden muss . Sobald die Sitzung geschlossen ist, wird die entsprechende Handlungsressource zerstört. Der Versuch, Debug -Informationen zu erhalten, gibt zu diesem Zeitpunkt leere Daten zurück oder ein Fehler wird geworfen.

 $ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

// Holen Sie sich Debug -Informationen,Muss in curl_close Vor
$info = curl_getinfo($ch);

curl_close($ch);

print_r($info);

2. Detailliertere Protokolle: Verwenden Sie Curlopt_verbose, um Debugging -Informationen auszugeben

Wenn Sie Debugging-Informationen auf niedrigerer Ebene wie das interne Betriebsprotokoll von Curl anzeigen möchten, können Sie die Option curlopt_verbose aktivieren. Dies schreibt das Debug -Protokoll in die angegebene Stream -Ressource, die normalerweise zur Ausgabe einer Datei- oder PHP -Standardausgabe verwendet wird.

Beispiel: Schreiben Sie ausführliche Protokolle zur Datei

 $logFile = fopen(__DIR__ . '/curl_debug.log', 'w');

$ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true); // Aktivieren Sie eine detaillierte Protokollierung
curl_setopt($ch, CURLOPT_STDERR, $logFile); // Log -Ausgabedatei angeben

$response = curl_exec($ch);
curl_close($ch);

fclose($logFile);

Dieser Code schreibt Debug -Informationen wie Verbindungsprozess, Anforderungsheader, Antwortheader usw. in die Datei curl_debug.log , die sehr geeignet ist, HTTPS -Handshake, Umleitung und andere Probleme zu beheben.

3. Optionale Erweiterungslösung: Verwenden Sie CURL, um die HTTP -Protokollkapselung zu implementieren

Wenn Sie in tatsächlichen Projekten Anforderungsprotokolle, Fehlermeldungen usw. auf einheitliche Weise verarbeiten möchten, können Sie Curl -Anforderungen wie die Implementierung einer einfachen Protokollierungsklasse zusammenfassen.

 function curlRequestWithLog($url, $logPath) {
    $fp = fopen($logPath, 'w');

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_VERBOSE => true,
        CURLOPT_STDERR => $fp
    ]);

    $response = curl_exec($ch);
    $info = curl_getinfo($ch);

    curl_close($ch);
    fclose($fp);

    return ['response' => $response, 'info' => $info];
}

$result = curlRequestWithLog('https://gitbox.net/api/test', __DIR__ . '/debug.log');
print_r($result['info']);

Mit der Kapselung können Entwickler den Verwaltungsprozess von Anforderungen und Protokollen problemlos steuern und wiederholte Konfigurationen in jeder Anforderung vermeiden.

4. Zusammenfassung

  1. curl_getInfo () muss vor curl_close () aufgerufen werden;

  2. Um detaillierte Debugging -Informationen anzuzeigen, aktivieren Sie curlopt_verbose und geben Sie das Protokoll in der Datei in Verbindung mit curlopt_stderr aus.

  3. Die Kapselung ermöglicht eine bessere Steuerung der Protokollausgabe- und Debugging -Prozesse.

Das Beherrschen dieser Debugging-Techniken ist sehr notwendig, um Curl-basierte PHP-Netzwerkanforderungsfunktionen zu entwickeln und aufrechtzuerhalten. Insbesondere bei einer Verbindung zu APIs von Drittanbietern (z. B. Gitbox-Schnittstellen) wird es die Effizienz der Problemuntersuchung erheblich verbessern, die Anforderungsdetails genau zu erfassen.