PHP の fopen を使用すると、fopen()
場所をファイル ストリームとして http できます。
しかし、できませんfseek()
かrewind()
、それ以外fclose()
にこれを達成する方法はありfopen()
ますか?
3 に答える
他の人はそれについて言及しました:PHPは非ローカルストリームをサポートfseek()
していません。rewind()
ファイルをダウンロード/キャッシュして、それを操作することをお勧めします。例えば
$cache = fopen('php://temp', 'r+');
stream_copy_to_stream($remoteResource, $cache);
$cache
これで、以前に行ったことは何でもできるはず$remoteResource
ですが、その中でシークできるようになった (したがって、巻き戻しもできる) ことを除きます。temp-stream を閉じると、PHP は使用済みのリソースを自動的にクリーンアップします。
f____
まず、関数を使用してリモート ファイルを開くべきではありません。それがcurlの目的です。
リモートソケットのポインターをリセット/巻き戻す方法があるとは思わないので、PHP のファイル関数がストリーム内のデータをバッファーおよびキャッシュしない限り、ポインターを巻き戻す方法がわかりません。
私は間違っているかもしれませんが...私はソケットの専門家ではありません。
PHPドキュメントからの引用
ノート:
すべてのストリームがシークをサポートしているわけではありません。シークをサポートしていない場合、現在の位置からのフォワード シークは、データの読み取りと破棄によって実行されます。他の形式のシークは失敗します
fseek() と同様に、rewind() 関数は、fopen() によって返されたファイル ポインタが "http://" または "ftp://" 形式を使用している場合には使用できません。