cURL in PHP gibt unterschiedliche Daten in der Datei und Rücktransfer
Frage
Ich habe bemerkt, dass cURL in PHP verschiedenen Daten zurückgibt, wenn die Ausgabe in eine Datei über CURLOPT_FILE
erzählt, wie es tut, wenn gesagt, die Ausgabe in einen String über CURLOPT_RETURNTRANSFER
zu senden.
_RETURNTRANSFER
scheinen Zeilenumbrüche und zusätzlichen Leerraum, als ob das Parsen es für die Anzeige als Standard-HTML-Code zu entfernen. _FILE
auf der anderen Seite erhält die Datei genau so, wie es beabsichtigt war.
Ich habe durch die Dokumentation auf php.net lesen, aber habe nichts gefunden, das mein Problem zu lösen scheint. Im Idealfall würde Ich mag den genauen Inhalt haben _RETURNTRANSFER
zurückkehren, damit ich eine Zwischendatei beseitigen könnte, aber ich sehe keinen Weg, um dies möglich zu machen.
Hier ist der Code ich verwende. Die in Frage stehenden Daten wird eine CSV mit Endungen \ r \ n Zeile Datei.
function update_roster() {
$url = "http://example.com/";
$userID = "xx";
$apikey = "xxx";
$passfields = "userID=$userID&apikey=$apikey";
$file = fopen("roster.csv","w+");
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $passfields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILE, $file);
$variable_in_question = curl_exec ($ch);
curl_close ($ch);
fclose($file);
return $variable_in_question;
}
Es stellt sich heraus, ist der Fehler nicht in dem, was zurückgegeben wurde, aber in der Art und Weise, ich würde darüber Parsen. \ R \ n ist die Art und Weise nicht analysiert ich, wenn in einzelnen Anführungszeichen erwartet, Schalen Anführungszeichen mein Problem gelöst zu verdoppeln. Ich war nicht bewusst, dass dies einen Unterschied innerhalb Funktionsaufrufe wie das gemacht.
Das funktioniert ganz gut: $cresult = split("\r\n", $cresult);
Dies gilt nicht: $cresult = split('\r\n', $cresult);
Lösung
Es stellt sich heraus, ist der Fehler nicht in dem, was zurückgegeben wurde, aber in der Art und Weise, ich würde darüber Parsen. \ R \ n ist die Art und Weise nicht analysiert ich, wenn in einzelnen Anführungszeichen erwartet, Schalen Anführungszeichen mein Problem gelöst zu verdoppeln. Ich war nicht bewusst, dass dies einen Unterschied innerhalb Funktionsaufrufe wie das gemacht.
Das funktioniert ganz gut: $cresult = split("\r\n", $cresult);
Dies gilt nicht: $cresult = split('\r\n', $cresult);
Andere Tipps
In den meist scripting langage (es ist auch wahr, in Bash zum Beispiel) werden einfache Anführungszeichen verwendet, um Dinge darzustellen, wie sie geschrieben sind, während doppelte Anführungszeichen werden „analysiert“ (ich glaube nicht, es ist das richtige Wort, aber ich kann‘ t besser finden).
$str = 'foo';
echo '$str'; // print “$str” to the screen
echo "$str"; // print “foo” to the screen
Es ist wahr, für Variablen und Escape-Zeichen.
Ich habe nicht versucht, den „Fehler“ zu reproduzieren (Ich denke, wir dies als Fehler betrachten können, wenn es das tatsächliche Verhalten ist), aber vielleicht könnte man darüber hinwegkommen.
Die PHP-Doc sagt, dass der Standard comportement ist das Ergebnis in eine Datei zu schreiben, und dass die Standarddatei ist STDOUT (die Browsers Fenster). Was Sie wollen, ist das gleiche Ergebnis als in einer Datei zu erhalten, aber in einer Variablen.
Sie können tun, dass mit ob_start();
und ob_get_clean();
.
$ch = curl_init(...);
// ...
ob_start();
curl_exec($ch);
$yourResult = ob_get_clean();
curl_close($ch);
Ich weiß, das ist nicht wirklich die saubere Art und Weise (wenn vorhanden), aber zumindest sould es funktioniert.
(Bitte entschuldigen Sie mich, wenn mein Englisch nicht perfekt ist; -) ...)