fseek

(PHP 4, PHP 5, PHP 7, PHP 8)

fseekファイルポインタを移動する

説明

fseek(resource$stream, int$offset, int$whence = SEEK_SET): int

stream が指しているファイルのファイル位置識別子を ファイル・ストリーム中の offset バイト目に セットします。新規位置は、ファイルの先頭からのバイト数で 測られます。これは whence で指定した位置に offset を追加することにより得られます。

一般的に、ファイルの終端より先の位置に移動することも許されています。 そこにデータを書き込んだ場合、ファイルの終端からシーク位置までの範囲を読み込むと 値 0 が埋められたバイトを返します。しかし、ストリームの種類によっては この挙動をサポートしていないものもあります。 ストリームのもとになっているストレージが固定長である場合などです。

パラメータ

stream

fopen()を使用して作成したファイルシステムポインタリソース。

offset

オフセット。

ファイルの終端から数えた位置に移動するには、負の値を offset に渡して whenceSEEK_END に設定しなければなりません。

whence

whence の値は以下のようになります。

  • SEEK_SET - 位置を offset バイト目に設定する
  • SEEK_CUR - 現在の位置に offset を加えた位置に設定する
  • SEEK_END - ファイル終端に offset を加えた位置に設定する

返り値

成功すると 0 を返し、そうでなければ -1 を返します。

例1 fseek() の例

<?php

$fp 
fopen('somefile.txt''r');

// データを読み込む
$data fgets($fp4096);

// ファイルの先頭に移動する。
// rewind($fp); と等価。
fseek($fp0);

?>

注意

注意:

追加モード (a あるいは a+) でファイルをオープンした場合、 ファイル位置によらず、ファイルに書き込むあらゆるデータが追加されます。また fseek() の結果は未定義となります。

注意:

すべてのストリームがシーク処理に対応しているわけではありません。 シークに対応していないストリームで現在位置から前方へのシークを行うには、 データを読み込んでそれを捨てていくしかありません。それ以外のやり方は失敗します。

参考

  • ftell() - ファイルの読み書き用ポインタの現在位置を返す
  • rewind() - ファイルポインタの位置を先頭に戻す