【php】あるディレクトリの中のファイル一覧を作る関数
問題
あるディレクトリの中のファイル一覧を作りたい。phpで。

答え
こんな関数を作るとわかりやすいでしょうか。
//ファイル一覧作成関数
function rd($p, $x = array())
{
$d = dir($p);
while (false !== ($e = $d->read())) {
if ($e != '.' && $e != '..') {
$x[] = $d->path . '/' . $e;
if (is_dir($d->path . '/' . $e)) {
$x = rd($d->path . '/' . $e, $x);
}
}
}
return $x;
}
- それ以上深い階層がなければ、ファイルを集めてくる。
- それ以上深い階層があれば、再帰でさらに調べる。
- . と .. は無視。
LinuxでもWindowsでも使える。
ディレクトリも隠しファイル(先頭が.)も拾ってくるので、ファイルだけ集めたかったり、隠しファイルは対象外にしたい場合は調整すること。
使用例
$files = rd('/home/www/hoge/fuga');
//→配下のファイル、ディレクトリの一覧が配列で取得できる
応用例
ファイルを集めてきて、拡張子が.htmlだったら、.phpに変える。
$files = rd('/home/www/hoge/fuga');
foreach ($files as $file) {
if (substr($file, -5) == '.html') {
rename($file, substr($file, 0, -5) . '.php');
}
}
メモ
- SPLのRecursiveDirectoryIterator使うといいよ。
- Windows環境で日本語のディレクトリのとき大丈夫?
- glob()もいいよ。