PHP 特定ディレクトリ内にあるファイル一覧を取得する方法 – globとopendirそれぞれでの実行

この記事は4年前に書かれました。不適当な記述を含む場合がありますので、参考程度に留めてください。

どうもこんにちは。Toshikuraです。今回のTipsは【PHP 特定ディレクトリ内にあるファイル一覧を取得する方法 – globとopendirそれぞれでの実行】です。何解りきった事をと言われてしまいそうですが…地味に出現するのでメモしておきます。

例でのディレクトリ

例では【dir】ディレクトリの中にいくつかの画像ファイルといくつかのディレクトリが格納されている事を想定し、このディレクトリからファイルのみ取得します。

globでの実装

globではワイルドカードが使用できます。パターン以外にもフラグの指定、またその組み合わせも可能です。またglobを使用すれば拡張子の指定も比較的容易に実現可能です。ここではあくまで参考程度ですので詳しくはマニュアルをご参照ください。

PHP
foreach(glob(‘dir/*’) as $file){
if(is_file($file)){
echo htmlspecialchars($file);
}
}
例)拡張子の指定。GIF|ZIP|PDF
foreach(glob(‘dir/{*.gif,*.zip,*.pdf}’,GLOB_BRACE) as $file){
if(is_file($file)){
echo htmlspecialchars($file);
}
}

opendirでの実装

globに比べ少々長くなりますが、見比べる意味も込め書いておきます。個人的にはこちらの方が手順を踏んでいるので安心できますが使う事はあまりないかも。詳しくはマニュアルをご参照ください。

PHP
$arr = array();
$dir = ‘dir/’;
$handle = opendir($dir) or exit(‘NG’);
while ($fname = readdir($handle)) {
if(is_file($dir . $fname)){
array_push($arr, $fname);
}
}
closedir($handle);
foreach ($arr as $key => $value) {
echo $dir.htmlspecialchars($value);
}

以上になります。