php globでディレクトリ配下のファイル名を取得する

  • 作成日 2021.11.16
  • php
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
)