php globでディレクトリ配下のファイル名を取得する
phpで、globを使用して、ディレクトリ配下のファイル名を取得するサンプルコードを記述してます。phpのバージョンは8.0です。
環境
- OS CentOS Linux release 8.0.1905 (Core)
- php 8.0.0
- nginx 1.14.1
glob使い方
globを使用すれば、ディレクトリ配下のファイル名を取得することが可能です。
<?php
// 実行ファイルのあるディレクトリにあるファイルを全て取得
$filelist = glob('./' . '*');
foreach ($filelist as $file) {
if (is_file($file)) print ($file) . PHP_EOL;
}
カレントディレクトリ配下のファイル
実行結果
./404.html
./50x.html
./bar.txt
./foo.txt
./hoge.txt
./index.html
./nginx-logo.png
./p.php
./poweredby.png
./sample.php
./system.json
./test.json
./test1.txt
./test2.txt
拡張子がtxtとhtmlのもののみを取得する場合は、オプション「GLOB_BRACE」を使用します。
<?php
// 拡張子がtxtとhtmlのものを出力
$filelist = glob('./' . '{*.txt,*.html}',GLOB_BRACE);
foreach ($filelist as $file) {
if (is_file($file)) print ($file) . PHP_EOL;
}
実行結果
./bar.txt
./foo.txt
./hoge.txt
./test1.txt
./test2.txt
./404.html
./50x.html
./index.html
正規表現を使用することもできます。
<?php
// 拡張子がtxtとhtmlのものを出力
$filelist = glob('./' . '{test[1-9].*}',GLOB_BRACE);
foreach ($filelist as $file) {
if (is_file($file)) print ($file) . PHP_EOL;
}
実行結果
./test1.txt
./test2.txt
再帰的にディレクトリの中のファイルまで取得するには、以下のようにします。
<?php
function hoge($path)
{
$result = [];
foreach (glob($path . "/*") as $file) {
if (is_dir($file)) $result = array_merge($result, hoge($file));
$result[] = $file;
}
return $result;
}
$path = "./";
print_r(hoge($path));
実行結果
Array
(
[0] => .//404.html
[1] => .//50x.html
[2] => .//bar.txt
[3] => .//foo.txt
[4] => .//hoge.txt
[5] => .//index.html
[6] => .//nginx-logo.png
[7] => .//p.php
[8] => .//poweredby.png
[9] => .//sample.php
[10] => .//system.json
[11] => .//test/test.txt
[12] => .//test
[13] => .//test.json
[14] => .//test1.txt
[15] => .//test2.txt
)
-
前の記事
javascript lodashを使ってSymbolオブジェクトを判定する 2021.11.16
-
次の記事
php http_response_codeでHTTPレスポンスコードを設定または取得する 2021.11.16
コメントを書く