readdir()関数はディレクトリ内を探索し、そこに存在しているディレクトリやファイルの一覧を取得します。この関数を使うには、まずopendir()関数によって探索対象のディレクトリのハンドルを取得します。この関数の返り値はリソース型です。以降は返り値が代入された変数を使うことによって、そのディレクトリに関する情報にアクセスします。
ディレクトリハンドルを取得したら、readdir()関数を実行します。その引数には、ディレクトリハンドルが格納されている、opendir()関数の返り値が代入された変数を指定します。この関数を1回実行するたびに、ディレクトリ内のディレクトリやファイルが1つずつ順番に取り出され、返り値としてそれを取得できます「$file=readdir($dirh)」)。ディレクトリ内のすべての情報を取り出すためには、この処理をループで回します。返り値がFalseになるまでraddir()関数を繰り返し実行することで、すべての情報を取得することができます。
一連の処理が完了したら、closedir()関数を使ってディレクトリハンドルを閉じます。
ここで使われているis_dir()関数は、readdir()関数で取得されたものがディレクトリかどうかを判別する関数です。ディレクトリであればTrueを返します。is_file()関数は、readdir()関数で取得されたものがファイルかどうかを判別します。ファイルであればTrueを返します。
なお、readdir()関数の返り値はパスではなく、「ファイル名+拡張子」の部分だけです。この例において、カレントディレクトリをimagesへ移動する処理を行わずに「$dirh=opendir("images");」とした場合、readdir()関数でそこにある「ファイル名+拡張子」を取得することはできますが、カレントディレクトリにそのファイルがないため、それをis_file()関数に渡しても正しい結果は得られません。is_file()関数を使う場合には、事前にカレントディレクトリを移動させておく必要があります。
<?php header("Content-type: text/html; charset=utf-8"); //カレントディレクトリをimagesに移動 chdir("images"); //カレントディレクトリのディレクトリハンドルを開く $dirh = opendir("."); //ディレクトリ内を探索するループ while($file = readdir($dirh)){ //取得したディレクトリ名やファイル名を出力 echo $file . " → "; //ディレクトリの場合 if(is_dir($file)){ echo "ディレクトリ<br>"; } //ファイルの場合 if(is_file($file)){ echo"ファイル<br>"; } } //ディレクトリハンドルを閉じる closedir($dirh); ?>