ftell

関数の概要

PHPの ftell 関数は、ファイルポインタの現在の位置(オフセット)を取得するために使われます。ファイル操作を行う際に、現在どこまで読み書きが進んでいるかを確認したい場合に便利です。

パラメータの説明

  • resource $stream – ファイルハンドル。fopenやその他のファイルオープン関数で取得したリソースを指定します。

戻り値

ファイルポインタの現在の位置を表す整数(バイト単位)を返します。ファイルの先頭からのバイト数です。もし処理に失敗した場合は false を返します。

使用例

基本的な使い方

<?php
$fp = fopen('example.txt', 'r');
if ($fp) {
    // ファイルの最初の位置を表示
    echo '現在のファイルポインタ位置: ' . ftell($fp) . "n";

    // 10バイト分読み込む
    fread($fp, 10);

    // 現在の位置を表示
    echo '10バイト読み込んだ後の位置: ' . ftell($fp) . "n";

    fclose($fp);
} else {
    echo "ファイルを開けませんでした。n";
}
?>

この例では、ファイルの先頭位置が0から始まり、10バイト読み込んだ 後のファイルポインタ位置が表示されます。

ファイルの特定位置に移動してから位置を取得

<?php
$fp = fopen('example.txt', 'r');
if ($fp) {
    // ファイルポインタを5バイト目に移動
    fseek($fp, 5);

    // 現在のファイルポインタ位置を取得
    $pos = ftell($fp);
    echo "ファイルポインタの移動後の位置: {$pos}n";

    fclose($fp);
} else {
    echo "ファイルオープン失敗n";
}
?>

この例では、fseekでファイル内の特定位置に移動し、その後に ftell で現在位置を確認しています。

ファイル書き込み中のポインタ位置確認

<?php
$fp = fopen('output.txt', 'w');
if ($fp) {
    fwrite($fp, "こんにちはn");
    echo "書き込み後のファイルポインタ位置: " . ftell($fp) . "n";

    fwrite($fp, "PHP ftell関数のテストn");
    echo "2回目の書き込み後の位置: " . ftell($fp) . "n";

    fclose($fp);
} else {
    echo "ファイルを開けませんでしたn";
}
?>

ファイルに書き込みを行った後、書き込み完了時点でのファイルポインタの位置を取得しています。書き込み量に応じてポインタ位置が進んでいることがわかります。

関連する関数

  • fopen – ファイルを開く
  • fread – ファイルから読み込む
  • fwrite – ファイルに書き込む
  • fseek – ファイルポインタを移動する
  • rewind – ファイルポインタを先頭に戻す
  • feof – ファイルの終端かどうかをチェックする

まとめ

ftell は、PHPでファイル操作をする際にファイルポインタの現在位置を調べるための重要な関数です。読み込みや書き込みの進行状態を把握したり、ファイル内の任意の位置を操作する際に役立ちます。
実務でも頻繁に使うため、fopenfreadfwritefseekと併せて理解しておくことが効果的です。