2

PHP の fopen を使用すると、fopen()場所をファイル ストリームとして http できます。
しかし、できませんfseek()rewind()、それ以外fclose()にこれを達成する方法はありfopen()ますか?

4

3 に答える 3

6

他の人はそれについて言及しました:PHPは非ローカルストリームをサポートfseek()していません。rewind()ファイルをダウンロード/キャッシュして、それを操作することをお勧めします。例えば

$cache = fopen('php://temp', 'r+');
stream_copy_to_stream($remoteResource, $cache);

$cacheこれで、以前に行ったことは何でもできるはず$remoteResourceですが、その中でシークできるようになった (したがって、巻き戻しもできる) ことを除きます。temp-stream を閉じると、PHP は使用済みのリソースを自動的にクリーンアップします。

于 2011-06-29T09:17:38.497 に答える
1

f____まず、関数を使用してリモート ファイルを開くべきではありません。それがcurlの目的です。

リモートソケットのポインターをリセット/巻き戻す方法があるとは思わないので、PHP のファイル関数がストリーム内のデータをバッファーおよびキャッシュしない限り、ポインターを巻き戻す方法がわかりません。

私は間違っているかもしれませんが...私はソケットの専門家ではありません。

于 2011-02-13T19:38:02.503 に答える
0

PHPドキュメントからの引用

ノート:

すべてのストリームがシークをサポートしているわけではありません。シークをサポートしていない場合、現在の位置からのフォワード シークは、データの読み取りと破棄によって実行されます。他の形式のシークは失敗します

fseek() と同様に、rewind() 関数は、fopen() によって返されたファイル ポインタが "http://" または "ftp://" 形式を使用している場合には使用できません。

于 2011-02-13T19:41:33.473 に答える