【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()もいいよ。
コメント