私はphp://入力を読む代わりに探しています。これを使ってCURL PUTからXMLデータを取得します。PHPで未加工のI/Oストリームを読み取る別の方法
私は通常でこれを行う:しかし、私はWindows上でfile_get_contents()
でいくつかの問題を抱えている
$xml = file_get_contents('php://input');
。
おそらくfopen()
またはfread()
を使用していますか?
私はphp://入力を読む代わりに探しています。これを使ってCURL PUTからXMLデータを取得します。PHPで未加工のI/Oストリームを読み取る別の方法
私は通常でこれを行う:しかし、私はWindows上でfile_get_contents()
でいくつかの問題を抱えている
$xml = file_get_contents('php://input');
。
おそらくfopen()
またはfread()
を使用していますか?
はい、あなたが行うことができます:
$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
が同じ流れのために働くことを疑う。
これはうまくいきますが、私が 'PUTTING'しているXMLデータ話す)が8192バイトを超えていますか? –
そして、私はfile_get_contents()の問題はいくつかのWindowsのバグだと思います。 –
その理由は、ループです。 ['fread'](http://us.php.net/fread)のドキュメントを見ると、要求された長さ全体を必ずしも読み取るわけではないことがわかります。それで、代わりに、それが全体を読むことができない場合に補うために読んでいる間にループするのがより良い習慣と見なされます(より強固です)。 – ircmaxell
私は解決策を見つけたと思う。
$f = @fopen("php://input", "r");
$file_data_str = stream_get_contents($f);
fclose($f);
さらに、私はファイルサイズを指定する必要はありません。
あなたは間違いなくfopenなどを使うべきです、file_get_contentsは単なるラッパーです。 Fopenは、おそらくファイル記述子を扱うために得ることができる最も低レベルのPHPコードです –
おそらく関連しています:[PHPとRESTfulベースのWebサービスの作成に最適なフレームワーク](http://stackoverflow.com/questions/238125/best- PHPのフレームワークと安らかなベースのWebサービス) – Gordon
file()を使用して配列を返します。file_get_contents()は文字列を返しますが、fopenはファイルを開きますが、プロトコルハンドラ(php://)が必要です。ファイルの拡張子を指定してください--- fopen( "c:\\ folder \\ resource.txt"、 " r "); – B4NZ41