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);

War es hilfreich?

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; -) ...)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top