php_stream_seek() は stream の内部位置を移動します。 新しい位置は、offset の値を、 whence で示された位置に加算することで決定されます。 whence が SEEK_SET にセット されていた場合は、ストリームの開始位置を、SEEK_CUR の場合は、ストリームの現在位置を、SEEK_END の場合は、 ストリームの終端位置を、それぞれ計算の基準とします。
php_stream_seek() は成功時に 0 を、失敗時に -1 を 返します。
注意: すべての種類のストリームがシーク動作をサポートしているわけでは ありませんが、ストリーム API は、whence SEEK_CUR に設定されていて、かつ offset が正の値の場合、 php_stream_read() で offset バイト分だけ読み込んで、読み込まれた内容を破棄することで、シークを エミュレートしようとします。
エミュレーションは、下層にあるストリームの実装が、シークをサポート していないときのみに行われます。つまり、仮に開かれているストリームが ファイルベースのストリームで、それがシークできないパイプを ラップしていたとしても、ストリーム API はエミュレーションを行いません。 ファイルベースのストリームはシーク動作を実装しているからです。 このとき、シークは失敗し、エラーが呼び出し元に返されます。