Bei der Verwendung von PHP -Curl -Erweiterung für Netzwerkanforderungen rufen Entwickler häufig Curl_Close () an, um eine Curl -Sitzung zu schließen. Aber viele Menschen begegnen dieses Problem beim Debuggen:. Denn wenn Curl_Close () aufgerufen wird, werden Ressourcen im Zusammenhang mit der Sitzung veröffentlicht, einschließlich Fehlermeldungen.
In diesem Artikel wird erläutert, wie Sie vor dem Schließen einer Sitzung mögliche Fehler in Curl erhalten und debuggen und einige praktische Vorschläge und Beispielcode liefert.
curl_close () veröffentlicht den von curl_init () erstellten Curl -Handle. Nach der Veröffentlichung können Sie nicht mehr curl_error () oder curl_errno () aufrufen, um die Fehlermeldung anzuzeigen. Auf diese Weise müssen wir rechtzeitig Fehlerinformationen zum Debuggen oder Aufzeichnen vor dem Schließen des Griffs erhalten.
Das Folgende ist ein Standardanforderungsprozess, achten Sie auf den Zeitpunkt, Fehlerinformationen zu erhalten:
<?php
$url = "https://gitbox.net/api/data";
// Initialisierung cURL Sitzung
$ch = curl_init();
// aufstellen cURL Optionen
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Eine Anfrage ausführen
$response = curl_exec($ch);
// 在SchließungSitzung前获取Fehler信息
if (curl_errno($ch)) {
$errorCode = curl_errno($ch);
$errorMessage = curl_error($ch);
error_log("cURL Fehler [$errorCode]: $errorMessage");
} else {
// Verarbeitungsantwort
echo "Antwortinhalt: " . $response;
}
// Schließung cURL Sitzung
curl_close($ch);
Zusätzlich zu curl_error () und curl_errno () können Sie auch die folgenden Methoden verwenden, um weiter zu debuggen:
Sie können curlopt_verbose auf true festlegen, damit PHP die detaillierten Informationen des Anforderungsprozesses für die Standardfehlerausgabe ausgibt, die zum Debuggen im CLI -Modus geeignet ist:
curl_setopt($ch, CURLOPT_VERBOSE, true);
Wenn Sie ausführliche Informationen in die Protokolldatei schreiben möchten:
$verbose = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $verbose);
Nach Abschluss der Anfrage kann der Protokollinhalt gelesen werden:
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
error_log("cURL Informationen debuggen: \n" . $verboseLog);
Manchmal hat die Anforderung selbst keinen Netzwerkfehler, aber der Server gibt den falschen HTTP -Statuscode zurück. Sie können es überprüfen durch:
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
error_log("HTTP Statuscode: $httpCode");
}
Um Multiplexing und Fehleraufnahme zu erleichtern, können Curl -Anforderungen in eine Funktion eingekapselt werden:
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 Anfrage fehlgeschlagen: " . $error);
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
throw new Exception("HTTP StatuscodeFehler: " . $httpCode);
}
return $response;
}
try {
$data = fetchData("https://gitbox.net/api/data");
echo "Erfolgreich werden: $data";
} catch (Exception $e) {
error_log("Ausnahmeaufnahme: " . $e->getMessage());
}
Bei der Verwendung von PHP -Curl für Netzwerkanforderungen ist der Schlüssel zum Debuggen darin, Fehlerinformationen rechtzeitig zu erhalten, bevor Sie die Sitzung schließen . Indem Entwickler rational mit Tools wie Curl_errno () , Curl_error () , Curl_getInfo () und Curlopt_verbose verwendet werden, können Entwickler Probleme effektiv lokalisieren und die Programmstabilität verbessern. Denken Sie daran, nicht zu versuchen, Fehler zu erhalten oder Informationen nach curl_close () zu erhalten, da es bis dahin zu spät war.