rewinddir

関数の概要

rewinddir は、PHPでオープンしたディレクトリの読み取り位置を先頭に戻すための関数です。ディレクトリを読み進めていくと内部のファイルやフォルダの一覧を順に取得できますが、途中で先頭に戻したい場合にこの関数を使います。主に opendir と組み合わせて使われます。

パラメータの説明

  • resource $dir_handle:ディレクトリをオープンした際に返されるディレクトリハンドル。このハンドルを元に読み取り位置をリセットします。

戻り値

rewinddir は戻り値を返しません。処理が失敗してもエラーは発生せず、単にハンドルの位置を先頭に戻す動作を行います。

使用例

基本的な使い方

<?php
$dir = opendir('/path/to/directory');

while (($file = readdir($dir)) !== false) {
    echo "ファイル名: $file<br>";
}

// 読み取り位置を先頭に戻す
rewinddir($dir);

echo "<br>もう一度読み直します。<br>";

while (($file = readdir($dir)) !== false) {
    echo "再読み取り: $file<br>";
}

closedir($dir);
?>

最初のループでディレクトリ内のファイルを一覧表示した後、rewinddirで読み込み位置を先頭に戻し、再度同じディレクトリの内容を読み直しています。

ファイルの拡張子別に複数回処理する例

<?php
$dir = opendir('/path/to/directory');

// まずはテキストファイルだけを表示
while (($file = readdir($dir)) !== false) {
    if (pathinfo($file, PATHINFO_EXTENSION) === 'txt') {
        echo "テキストファイル: $file<br>";
    }
}

// 先頭に戻す
rewinddir($dir);

// 次に画像ファイルだけを表示
while (($file = readdir($dir)) !== false) {
    if (in_array(pathinfo($file, PATHINFO_EXTENSION), ['jpg', 'png', 'gif'])) {
        echo "画像ファイル: $file<br>";
    }
}

closedir($dir);
?>

この例では一度ディレクトリ内のテキストファイルを抽出し、その後 rewinddir で読み取り位置をリセットして画像ファイルを抽出しています。

ディレクトリ読み込み中に条件で先頭に戻す例

<?php
$dir = opendir('/path/to/directory');

while (($file = readdir($dir)) !== false) {
    if ($file === 'trigger.txt') {
        // trigger.txt を見つけたら読み込み位置を先頭に戻す
        rewinddir($dir);
        echo "読み取り位置を先頭に戻しました。<br>";
        break;
    }
}

closedir($dir);
?>

この例は特定のファイル名を見つけた時点で、読み取り位置をディレクトリ先頭に戻すケースです。読み込みの制御が柔軟に行えます。

関連する関数

  • opendir():ディレクトリをオープンしてディレクトリハンドルを取得
  • readdir():ディレクトリハンドルからファイル名を一つずつ読み取る
  • closedir():オープンしたディレクトリを閉じる

まとめ

rewinddir はPHPでディレクトリを読み込む際、ディレクトリハンドルの読み取り位置を先頭に戻すために使う便利な関数です。ディレクトリ内のファイルを何度も異なる条件で処理したいときに非常に役立ちます。
基本的には opendir でディレクトリを開き、readdir で読み進めた後に、一度読み位置をリセットしたい時に rewinddir を呼び出してください。