rewind

関数の概要

PHPのrewind関数は、ファイルポインタを現在の位置からファイルの先頭に戻すための関数です。ファイルを読み書きする際に、ファイルの先頭から再度読み込みを始めたい場合に使います。ファイル操作の中で、ファイルの読み込み順序をリセットしたいときに便利な関数です。

パラメータの説明

  • resource $stream : ファイルポインタリソース。fopen関数などで開いたファイルのリソースを指定します。

戻り値

返り値はありません。関数は成功時も失敗時も値を返さず、ファイルポインタの位置を変更するだけです。ファイルが有効なリソースでない場合やエラーが発生した場合には警告が出ることがあります。

使用例

基本的な使い方

<?php
$fp = fopen('sample.txt', 'r');
if ($fp) {
    $line1 = fgets($fp);
    echo $line1;
    
    rewind($fp);
    
    $line2 = fgets($fp);
    echo $line2;

    fclose($fp);
}
?>

この例では、ファイルを1行読み込んだ後にrewindを使ってファイルポインタを先頭に戻し、もう一度最初の行を読み込んでいます。

ファイル全体を2回読み込む例

<?php
$fp = fopen('data.csv', 'r');
if ($fp) {
    // 1回目の読み込み
    while (($line = fgets($fp)) !== false) {
        echo $line . '<br>';
    }

    // ファイルポインタを先頭に戻す
    rewind($fp);

    echo '<hr>';

    // 2回目の読み込み
    while (($line = fgets($fp)) !== false) {
        echo strtoupper($line) . '<br>';
    }

    fclose($fp);
}
?>

1回目はそのまま内容を表示し、rewindで先頭に戻した後に2回目は大文字変換して表示しています。

バイナリファイルの一部読み込み後に先頭に戻す

<?php
$fp = fopen('image.jpg', 'rb');
if ($fp) {
    $header = fread($fp, 10);
    echo bin2hex($header) . '<br>';

    rewind($fp);

    $full = fread($fp, filesize('image.jpg'));
    echo 'ファイルサイズ: ' . strlen($full) . ' バイト';

    fclose($fp);
}
?>

バイナリモードでファイルを開き、最初に一部のデータを読み込んだ後、rewindで先頭に戻してからファイル全体を再読み込みしています。

関連する関数

  • fopen – ファイルを開く
  • fgets – ファイルから1行ずつ読み込む
  • fread – 指定したバイト数だけファイルを読み込む
  • fseek – ファイルポインタを任意の位置に移動する
  • ftell – 現在のファイルポインタの位置を取得する
  • feof – ファイルの終端に達したか確認する
  • fclose – ファイルを閉じる

まとめ

PHPのrewind関数は、開いたファイルのファイルポインタを強制的に先頭に戻すためのシンプルで便利な関数です。ファイルを再度読み込む必要がある場合や、何度も同じファイルの内容を読み込む場面で役に立ちます。ファイル処理を行う際に覚えておくと、効率的なデータ読み込みが可能になるため実務でも頻繁に使用されます。