PHP Curl _file ve _RETURNTRANSFER farklı verileri döndürür

3 Cevap php

Ben söyledim CURLOPT_RETURNTRANSFER aracılığıyla bir dizeye çıktı göndermek için söyledim zaman olduğu gibi PHP cURL CURLOPT_FILE aracılığıyla bir dosyaya çıktı farklı veri döndüren fark etmişsinizdir.

_RETURNTRANSFER standart HTML kodu olarak göstermek için bunu ayrıştırma gibi satırsonlarını ve ekstra beyaz boşluk şerit görünüyor. _FILE diğer taraftan amaçlandığı tam olarak dosya korur.

Ben php.net üzerinde belgelerine okudum ama benim sorunu çözmek gibi görünüyor şey bulamadı. İdeal olarak, var ben bir ara dosya ortadan böylece _RETURNTRANSFER tam içeriğini dönmek, ama bu mümkün hale herhangi bir şekilde görmüyorum istiyorum.

İşte ben kullanıyorum kodudur. Söz konusu veriler \ r \ n satır sonları ile bir CSV dosyası.

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


Çıkıyor, hata iade ediliyordu ne değil, ama bir şekilde bunu ayrıştırma hakkında gidiyordu. \ R \ n tek tırnak koyduğunuzda benim sorunum çözüldü çift tırnak geçiş, beklenen şekilde değil ayrıştırılır. Ben bunun gibi bir fonksiyon çağrıları içinde bir fark yarattı farkında değildi.

Bu sadece iyi çalışır: $cresult = split("\r\n", $cresult);

Bu etmez: $cresult = split('\r\n', $cresult);

3 Cevap

Çıkıyor, hata iade ediliyordu ne değil, ama bir şekilde bunu ayrıştırma hakkında gidiyordu. \ R \ n tek tırnak koyduğunuzda benim sorunum çözüldü çift tırnak geçiş, beklenen şekilde değil ayrıştırılır. Ben bunun gibi bir fonksiyon çağrıları içinde bir fark yarattı farkında değildi.

Bu sadece iyi çalışır: $cresult = split("\r\n", $cresult);

Bu etmez: $cresult = split('\r\n', $cresult);

Onlar yazıldığı gibi çift tırnak "analiz", (i bu uygun kelime olduğunu sanmıyorum ama ben daha bulamıyorum oysa en betik langage (it örneğin Bash de doğrudur), basit tırnak, şeyleri temsil etmek için kullanılır .)

$str = 'foo';
echo '$str'; // print “$str” to the screen
echo "$str"; // print “foo” to the screen

Bu değişkenler ve kaçan karakterler için geçerlidir.

Ben "bug" (Ben gerçek davranış olup olmadığını biz bir hata olarak kabul edebiliriz sanırım) yeniden deneyin vermedi, ama belki bunun üzerine alabilir.

PHP Doc varsayılan comportement bir dosyaya sonuç yazmak için, ve varsayılan dosya STDOUT (tarayıcı penceresi) olduğunu söylüyor. Ne istediğiniz bir dosyada, ancak bir değişken daha aynı sonucu elde etmektir.

Bunu yapabileceğini ob_start(); ve ob_get_clean(); kullanarak.

$ch = curl_init(...);
// ...
ob_start();
curl_exec($ch);
$yourResult = ob_get_clean();
curl_close($ch);

Ben (eğer varsa) gerçekten temiz bir yolu olmadığını biliyorum, ama en azından para cezası çalışır Semester.

(Benim ingilizce ;-) mükemmel değilse lütfen beni affedin ...)