Machen cURL-Ausgabe STDERR in eine Datei (oder string)
Wir versuchen zu Debuggen einige cURL-Fehler auf dem server, und ich würde gerne sehen, STDERR melden. Zur Zeit sehen wir für unsere Fehler "error code: 7", und wir können keine Verbindung zum Ziel-server. Wir haben kontaktiert der host und die spezielle Regel, die den port zu öffnen, die wir brauchen, und wir ignorieren das Zertifikat für die Zeit.
Trotzdem können wir uns nicht anschließen. Ich muss zum Debuggen, aber ich kann nicht sehen, alle sachdienlichen Informationen, die auf mein Ende.
Den Zeilen zu erwähnen, "VERBOSE" und "STDERR" sind die wichtigsten, denke ich. Nichts wird geschrieben $curl_log. Was mache ich falsch? Die folgenden Handbücher der Logik, das sollte richtig sein...
PHP im Einsatz:
<?php
$curl = curl_init();
$curl_log = fopen("curl.txt", 'w');
$url = "http://www.google.com";
curl_setopt_array($curl, array(
CURLOPT_URL => $url, //Our destination URL
CURLOPT_VERBOSE => 1, //Logs verbose output to STDERR
CURLOPT_STDERR => $curl_log, //Output STDERR log to file
CURLOPT_SSL_VERIFYPEER => 0, //Do not verify certificate
CURLOPT_FAILONERROR => 0, //true to fail silently for http requests > 400
CURLOPT_RETURNTRANSFER => 1 //Return data received from server
));
$output = fread($curl_log, 2048);
echo $output; //This returns nothing!
fclose($curl_log);
$response = curl_exec($curl);
//...restofscript...
?>
Aus PHP-manual: http://php.net/manual/en/function.curl-setopt.php
CURLOPT_VERBOSE TRUE, um die Ausgabe ausführliche Informationen. Schreibt die Ausgabe auf STDERR
CURLOPT_STDERR Einem alternativen Speicherort, um Fehler bei der Ausgabe anstatt " STDERR.
Es ist nicht eine Erlaubnis erteilen, ich habe die Datei-und Skript-Berechtigungen 777 auf dem server und meinem lokalen client ist windows und hat nie kümmerte sich um die Einstellungen für die Zugriffsrechte (es ist nur für dev sowieso).
curl_exec()
fehlt. Und was ist die Ausgabe, die Sie erwarten (und warum)?Oh, ja, ich fand, dass sich in meinem copy/paste. Setzen curl_exec zurück. Ich hoffe die bekommen irgendeine Art von debugging-Informationen, obwohl ich wirklich keine Ahnung habe, was von Ihr zu erwarten. Ich habe keine Ahnung, was die Ursache für die Verbindung zu einem Ausfall auf dem server.
Finden Sie ausführliche code-Beispiele in einer zugehörigen Antwort auf eine andere Frage, darunter tut dies im Speicher und nicht auf der Festplatte
InformationsquelleAutor Radley Sustaire | 2012-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie machen die paar Fehler in deinem Beispiel:
1) zu nennen
curl_exec()
vor der Lesung aus dem "verbose log", weilcurl_setopt()
nicht alle Aktionen ausführen, so kann auch nichts protokolliert werden, bevor die curl_exec().2) Sie öffnen
$curl_log = fopen("curl.txt", 'w');
nur zum schreiben, so dass nichts gelesen werden konnte, sogar nachdem Sie in die Datei schreiben und Zurückspulen des internen Dateizeigers.Damit die richtigen verkürzte code sollte wie folgt Aussehen:
HINWEIS: verbose-log könnte mehr als 2048 bytes, so könnte man "fclose" die $curl_log nach curl_exec() und Lesen Sie dann die ganze Datei, zum Beispiel mit file_get_contents().
In diesem Fall wird der Punkt 2) sollte nicht als Fehler 🙂
InformationsquelleAutor
Etwas spät zur party, aber diese Seite immer noch erscheint, hoch in Google, also lasst uns gehen.
Scheint es, dass CURLOPT_VERBOSE nicht alles loggen, was, wenn CURLINFO_HEADER_OUT ebenfalls auf TRUE eingestellt ist.
Dies ist eine bekannte Fehler in PHP (#65348), und wegen der Gründe, die Sie beschlossen, nicht, um es zu beheben.
InformationsquelleAutor
Putting al obigen Antworten zusammen, ich nutze diese Funktion, um eine Curl Post Request mit den Login um eine Datei-option:
Hoffe, dies hilft jemand.
$defaults[CURLINFO_HEADER_OUT]=1;
ausführlich nicht geschrieben, wenn CURLINFO_HEADER_OUT aktiviert istInformationsquelleAutor
Vom php-manual für die Funktion curl_setopt:
InformationsquelleAutor
Sollten Sie
nach
$response = curl_exec($curl);
andernfalls wird die Datei geschlossen, während curl ausgeführt wird.InformationsquelleAutor