1

PHPを使用してWebサービスを実行しています。URLの1つは、POST本文からカップルの画像を取得する必要があります。私は現在、fopen / freadソリューションを使用しています:

$size1 = intval($_REQUEST['img1']);
$size2 = intval($_REQUEST['img2']);
$sizeToRead = 4096;
$datas1 = null;
$datas2 = null;

$h = fopen('php://input','r+');
while($size1 > 0) {
    if($sizeToRead > $size1)
        $sizeToRead = $size1;

    $datas1 .= fread($h,$sizeToRead);
    $size1 -= $sizeToRead;
}
fclose($h);

file_put_contents('received1.png',$datas1);
//Same thing for the second image

このソリューションは正常に機能しますが、次を使用して読みやすくしようとしていますfile_get_contents()

file_put_contents('received1.png',file_get_contents('php://input',false,null,0,$size1));

しかし、それは私にエラーを与えます:

file_get_contents()ストリームはfile_get_contents()のシークをサポートしていません
ストリーム内の21694の位置のシークに失敗しました

それはストリームで探すことさえ可能ですか?たぶん、3番目のパラメータを別のものに変更することによって?

そうでない場合、私のコードをよりエレガントで効率的にする方法はありますか?

ありがとう。

4

1 に答える 1

2

マニュアルからの引用:

注:php:// inputで開かれたストリームは、一度しか読み取ることができません。ストリームはシーク操作をサポートしていません。ただし、SAPIの実装によっては、別のphp:// inputストリームを開いて、読み取りを再開できる場合があります。これは、リクエスト本文データが保存されている場合にのみ可能です。通常、これはPOSTリクエストの場合ですが、PUTやPROPFINDなどの他のリクエストメソッドには当てはまりません。

(私の強調)

于 2013-03-15T14:57:13.760 に答える