(PHP 4, PHP 5, PHP 7, PHP 8)
fseek — ファイルポインタを移動する
$stream
, int $offset
, int $whence
= SEEK_SET
): int
stream
が指しているファイルのファイル位置識別子を
ファイル・ストリーム中の offset
バイト目に
セットします。新規位置は、ファイルの先頭からのバイト数で
測られます。これは whence
で指定した位置に
offset
を追加することにより得られます。
一般的に、ファイルの終端より先の位置に移動することも許されています。 そこにデータを書き込んだ場合、ファイルの終端からシーク位置までの範囲を読み込むと 値 0 が埋められたバイトを返します。しかし、ストリームの種類によっては この挙動をサポートしていないものもあります。 ストリームのもとになっているストレージが固定長である場合などです。
stream
fopen() を使用して作成したファイルシステムポインタリソース。
offset
オフセット。
ファイルの終端から数えた位置に移動するには、負の値を
offset
に渡して
whence
を
SEEK_END
に設定しなければなりません。
whence
whence
の値は以下のようになります。
SEEK_SET
- 位置を offset
バイト目に設定するSEEK_CUR
- 現在の位置に offset
を加えた位置に設定するSEEK_END
- ファイル終端に offset
を加えた位置に設定する成功すると 0 を返し、そうでなければ -1 を返します。
例1 fseek() の例
<?php
$fp = fopen('somefile.txt', 'r');
// データを読み込む
$data = fgets($fp, 4096);
// ファイルの先頭に移動する。
// rewind($fp); と等価。
fseek($fp, 0);
?>
注意:
追加モード (
a
あるいはa+
) でファイルをオープンした場合、 ファイル位置によらず、ファイルに書き込むあらゆるデータが追加されます。また fseek() の結果は未定義となります。
注意:
すべてのストリームがシーク処理に対応しているわけではありません。 シークに対応していないストリームで現在位置から前方へのシークを行うには、 データを読み込んでそれを捨てていくしかありません。それ以外のやり方は失敗します。