【PHP8.x】fseek関数の使い方
fseek関数は、ファイルポインタを移動させる関数です。PHPでファイルを開いて読み書きを行う際、ファイル内には現在の読み書き位置を示す「ファイルポインタ」という内部的な目印があります。fseek関数は、このファイルポインタを指定した位置に移動させるために使用されます。
この関数を利用することで、開いているファイルの特定のバイト位置に直接ジャンプし、そこからデータの読み書きを開始することが可能になります。例えば、ファイルの先頭から何バイト目かの位置に移動したり、現在の読み書き位置から前後に指定したバイト数だけ移動したり、あるいはファイルの末尾に移動したりすることができます。これにより、ファイル全体を順に読み進めるだけでなく、必要な部分だけを効率的に読み書きできるようになります。
fseek関数は主に3つの引数を取ります。1つ目はfopen()
などで取得したファイルリソース、2つ目は移動するバイト数を示す「オフセット」、3つ目はオフセットの基準位置です。基準位置には、ファイルの先頭からの移動を示すSEEK_SET
、現在のファイルポインタ位置からの移動を示すSEEK_CUR
、ファイルの末尾からの移動を示すSEEK_END
のいずれかを指定します。
移動が成功した場合は0を返し、失敗した場合は-1を返しますので、関数の戻り値を確認することで、ファイルポインタの移動が適切に行われたかを判断できます。この機能は、特に大きなファイルを扱う場合や、ファイル内の特定のデータブロックに素早くアクセスする必要がある場合に非常に有効です。ファイルの特定箇所に繰り返しアクセスするような処理で、効率的なファイル操作を実現します。
基本的な使い方
構文(syntax)
<?php
$fileResource = fopen('data.txt', 'r');
$byteOffset = 10;
$seekOrigin = SEEK_SET; // SEEK_SET (ファイル先頭), SEEK_CUR (現在位置), SEEK_END (ファイル末尾)
$status = fseek($fileResource, $byteOffset, $seekOrigin);
fclose($fileResource);
?>
引数(parameters)
resource $stream, int $offset, int $whence = SEEK_SET
- resource $stream: 操作対象のファイルポインタまたはストリームリソース
- int $offset: 移動するバイト数
- int $whence = SEEK_SET: 相対位置を指定する定数 (SEEK_SET: ファイルの先頭, SEEK_CUR: 現在位置, SEEK_END: ファイルの末尾)
戻り値(return)
int
ファイルポインタを移動させた位置をバイト単位で返します。成功した場合は0、失敗した場合は-1を返します。