関数の概要
PHPの readdir 関数は、ディレクトリハンドルから次のファイルまたはディレクトリ名を取得するために使用します。ディレクトリを順番に読み取りたい場合に便利で、ディレクトリの中身を一つずつ処理したいときに役立ちます。
パラメータの説明
resource $dir_handle–opendir()関数で開かれたディレクトリハンドルを指定します。このハンドルから次の要素を取得します。
戻り値
ディレクトリ内の次のファイルまたはディレクトリ名を文字列として返します。ディレクトリの最後まで読み取った場合、もしくはエラーが発生した場合は false を返します。
使用例
基本的な使い方
<?php
$dir = "./sample_dir";
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo "ファイル名: $file<br>";
}
closedir($dh);
}
}
?>
この例では、sample_dir ディレクトリをオープンし、readdir を使ってファイル名を一つずつ取得して表示しています。全てのファイル名が出力されるまでループします。
特定のファイルを除外して表示する例
<?php
$dir = "./sample_dir";
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') {
continue; // 親ディレクトリと現在のディレクトリを除外
}
echo "対象ファイル: $file<br>";
}
closedir($dh);
}
?>
「.」や「..」といった特殊なディレクトリエントリを除外して、実際のファイルやフォルダのみを表示しています。
ファイルタイプを判別しながら読み込む例
<?php
$dir = "./sample_dir";
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') {
continue;
}
$fullPath = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($fullPath)) {
echo "[ディレクトリ] $file<br>";
} else {
echo "[ファイル] $file<br>";
}
}
closedir($dh);
}
?>
こちらのコードはディレクトリとファイルを区別して表示します。is_dir() を使って判別しているため、ファイルの種類で処理を分けることが可能です。
関連する関数
opendir()– ディレクトリをオープンし、ハンドルを取得するclosedir()– 開いたディレクトリを閉じるscandir()– ディレクトリ内の全ファイル・フォルダの配列を取得するis_dir()– パスがディレクトリかどうかを判定する
まとめ
readdir はPHPでディレクトリの中身を一つずつ順番に取得するのに便利な関数です。opendir と組み合わせて繰り返し処理を行い、ファイル名を取得することができます。初心者でも扱いやすく、実務のファイル操作でも活躍します。ファイルやディレクトリの判別といった応用も可能なので、ぜひ覚えておきたい関数の一つです。
