fseek

関数の概要

PHPの fseek 関数は、ファイルポインタの位置を指定した場所に移動させるための関数です。ファイルを読み書きする際に、指定の位置から操作を行いたい場合に使います。これにより、ファイルの先頭や末尾だけではなく、任意の位置からデータの読み書きが可能になります。

パラメータの説明

  • resource $handle : ファイルポインタ。fopenなどで開いたファイルリソースを指定します。
  • int $offset : ファイルポインタを移動させたい位置のオフセット(バイト数)。
  • int $whence : 位置の基準点を指定します。以下の定数のいずれかを使います。
    • SEEK_SET : ファイルの先頭からのオフセット
    • SEEK_CUR : 現在のファイルポインタ位置からのオフセット
    • SEEK_END : ファイルの末尾からのオフセット

戻り値

fseek は、ファイルポインタの位置の移動に成功すると 0 を返します。失敗すると -1 を返します。

使用例

基本的な使い方(ファイルの先頭から10バイト移動)

<?php
$fp = fopen("example.txt", "r");
if ($fp === false) {
    die("ファイルを開けませんでした");
}

// ファイルポインタを先頭から10バイト移動
$result = fseek($fp, 10, SEEK_SET);

if ($result === 0) {
    echo "ファイルポインタを移動しました";
} else {
    echo "ファイルポインタの移動に失敗しました";
}
fclose($fp);
?>

この例では、example.txtのファイルポインタをファイルの先頭から10バイトの位置に移動しています。

現在の位置から5バイト後ろに戻る

<?php
$fp = fopen("example.txt", "r+");
fseek($fp, 20, SEEK_SET); // まず20バイト先に移動

// 現在の位置から5バイト戻る
fseek($fp, -5, SEEK_CUR);

echo ftell($fp); // 現在の位置を表示(15になる)
fclose($fp);
?>

最初に20バイト目に移動し、その後現在位置から5バイト戻ることでファイルポインタを15バイト目に調整しています。

ファイルの末尾から指定バイト位置に移動して読み込む

<?php
$fp = fopen("example.txt", "r");

fseek($fp, -10, SEEK_END); // ファイル末尾から10バイト手前に移動
$data = fread($fp, 10);

echo $data;
fclose($fp);
?>

ファイルの末尾から10バイト前の位置にファイルポインタを移動し、そこから10バイト分のデータを読み込んでいます。

関連する関数

  • fopen : ファイルを開く
  • fread : ファイルからデータを読み込む
  • ftell : 現在のファイルポインタの位置を取得する
  • rewind : ファイルポインタをファイルの先頭に戻す
  • fwrite : ファイルにデータを書き込む
  • feof : ファイルの終端に達したか判定する

まとめ

fseek 関数は、ファイル操作においてファイルポインタの位置を自由に移動できる便利な関数です。読み書き位置を自在にコントロールすることで、大きなファイルの一部分だけを処理したり、特定の位置からデータを読み書きするといった柔軟な操作が可能になります。PHPでのファイル操作をより効率的に行いたい場合は、ぜひ fseek を活用してください。