【PHP】指定したディレクトリ(フォルダ)にあるファイル名をすべて参照する方法
少し前まではHTML&PHPの直打ちでサイトを運営しており、ディレクトリやファイルの操作を頻繁におこなっていましたが、サイト運営をWordPressでするようになり、あまりディレクトリを操作することもなくなったため、PHPでのディレクトリやファイル操作の方法を忘れていました。
ここでは自分の備忘録も兼ねて、指定したディレクトリ(いわゆるフォルダ)にある全てのファイルの名前を参照する方法を説明したいと思います。
opendir関数
指定したディレクトリに存在するファイルを参照する場合、まずはそのディレクトリを開かなければなりません。PHPでは、この操作をopendir関数で行います。
opendir(指定ディレクトリのパス);
この関数は指定したディレクトリハンドルをオープンするもので、成功した場合リソース型のデータを返してくれます(失敗した場合はfalseを返します)。
リソース型のデータ
「リソース型のデータ」と聞くと意味不明ですが、めっちゃ雑に表現すると「今フォルダを開いてるぜ!」っていう操作状態のデータが返ってきます。
この「フォルダを開いている状態」を保持することで、指定したフォルダの中身を参照することができます。
なお、opendir関数の戻り値を「echo」で出力した場合、
Resource id #2
と出力されます。
readdir関数
ディレクトリを開いたあとは、ディレクトリの中身を参照します。この操作をreaddir関数で行います。
今目の前にあるパソコンを例にすると、opendir関数がフォルダのクリック操作で、readdir関数が目視でファイルを確認みたいな感じです。
//ディレクトリハンドルをオープン
$handle = opendir(指定ディレクトリのパス);
//ディレクトリのファイルを参照
readdir($handle);
readdir関数はopendir関数で作成したハンドルを引数に渡すことで、ディレクトリ内にあるファイル名を返してくれます(失敗した場合はfalseを返す)。
返してくれるファイル名の順番ですが、システム上に格納されている順番となります。そのため、while構文を使えばディレクトリの中にあるすべてのファイルを参照することができます。
サンプル
上記の事を踏まえて、指定したディレクトリにある全てのファイル名を参照するプログラムを掲載したいと思います。
<?php //ディレクトリの指定 $directory_pass= './img_resize'; //指定したディレクトリハンドルをオープンできれば処理を実行 if ($handle = opendir($directory_pass)) { //オープンしたディレクトリにファイルが存在すればループで取り出していく while (false !== ($entry = readdir($handle))) { echo $entry; echo "<br />"; } } ?>
これを実行すると、「.」や「..」というものも出力されてしまいますので、次にこれらを除去するプログラムを掲載します。
といっても、if構文で条件分岐するだけです。
<?php //ディレクトリの指定 $directory_pass= './directory'; //指定したディレクトリハンドルをオープンできれば処理を実行 if ($handle = opendir($directory_pass)) { //オープンしたディレクトリにファイルが存在すればループで取り出していく while (false !== ($entry = readdir($handle))) { //ファイル名が「.」と「..」ではなければファイル名を出力 if($entry != "." && $entry != ".."){ echo $entry; echo "<br />"; } } } ?>
あわせて読んでほしい!
コメント
まだコメントはありません。