2011-02-02 8 views
4

私はphp://入力を読む代わりに探しています。これを使ってCURL PUTからXMLデータを取得します。PHPで未加工のI/Oストリームを読み取る別の方法

私は通常でこれを行う:しかし、私はWindows上でfile_get_contents()でいくつかの問題を抱えている

$xml = file_get_contents('php://input'); 

おそらくfopen()またはfread()を使用していますか?

+2

あなたは間違いなくfopenなどを使うべきです、file_get_contentsは単なるラッパーです。 Fopenは、おそらくファイル記述子を扱うために得ることができる最も低レベルのPHPコードです –

+0

おそらく関連しています:[PHPとRESTfulベースのWebサービスの作成に最適なフレームワーク](http://stackoverflow.com/questions/238125/best- PHPのフレームワークと安らかなベースのWebサービス) – Gordon

+0

file()を使用して配列を返します。file_get_contents()は文字列を返しますが、fopenはファイルを開きますが、プロトコルハンドラ(php://)が必要です。ファイルの拡張子を指定してください--- fopen( "c:\\ folder \\ resource.txt"、 " r "); – B4NZ41

答えて

1

はい、あなたが行うことができます:

$f = fopen('php://input', 'r'); 
if (!$f) die("Couldn't open input stream\n"); 
$data = ''; 
while ($buffer = fread($f, 8192)) $data .= $buffer; 
fclose($f); 

しかし、あなたは自問する必要があり質問は、なぜWindows上で動作していないfile_get_contentsされていますか?それがうまくいかない場合、私はfopenが同じ流れのために働くことを疑う。

+0

これはうまくいきますが、私が 'PUTTING'しているXMLデータ話す)が8192バイトを超えていますか? –

+0

そして、私はfile_get_contents()の問題はいくつかのWindowsのバグだと思います。 –

+0

その理由は、ループです。 ['fread'](http://us.php.net/fread)のドキュメントを見ると、要求された長さ全体を必ずしも読み取るわけではないことがわかります。それで、代わりに、それが全体を読むことができない場合に補うために読んでいる間にループするのがより良い習慣と見なされます(より強固です)。 – ircmaxell

0

私は解決策を見つけたと思う。

$f = @fopen("php://input", "r"); 
$file_data_str = stream_get_contents($f); 
fclose($f); 

さらに、私はファイルサイズを指定する必要はありません。

関連する問題