本記事では、phpにおいて、ファイルのパターン検索を行うことができる
glob関数の使い方について、サンプルプログラムを交えて紹介していく。
glob関数とは
glob関数はパターンにマッチするパスを探すことができる関数だ。
あるフォルダの中に入っている特定のパターンに一致するファイル名をまとめて取得することができ、結果をforeachなどのループ処理で扱うことができる点で便利な関数だ。
glob関数の書式
glob関数の書式は以下。
glob(ファイル名を取得したいパス[, オプションフラグ]);
第1引数には、探したいパターンになるパスを指定する。
第2引数には、オプションフラグ(※後述)を任意で指定する。無くても大丈夫。
glob関数の戻り値
指定したパスから見つかったファイルやフォルダを、配列の形式で取得する。
glob関数でファイルを取得する例
では実際にglob関数を使ってファイルを取得してみる。
例として以下のようなファイル群を格納した「test_dir」というディレクトリを用意した。
>ls -l test_dir
-rw-r--r-- 1 root staff 0 Nov 20 13:07 example.sh
-rw-r--r-- 1 root staff 0 Nov 20 22:24 file1
-rw-r--r-- 1 root staff 0 Nov 20 22:24 file2
-rw-r--r-- 1 root staff 0 Nov 20 22:24 file3
-rw-r--r-- 1 root staff 0 Nov 20 22:25 file4
-rw-r--r-- 1 root staff 0 Nov 20 22:25 file5
-rw-r--r-- 1 root staff 0 Nov 20 13:07 sample1.php
-rw-r--r-- 1 root staff 0 Nov 20 21:08 sample2.php
-rw-r--r-- 1 root staff 0 Nov 20 21:08 sample3.php
-rw-r--r-- 1 root staff 0 Nov 20 21:08 sample4.php
-rw-r--r-- 1 root staff 0 Nov 20 21:08 sample5.php
-rw-r--r-- 1 root staff 0 Nov 20 13:05 test.txt
glob実行サンプルプログラム
test_dir ディレクトリと同階層に、以下のようなglob関数を使用するサンプルプログラム(glob.php)を配置して実行する(※\nは改行文字)。
glob.php
<?php
echo "*と書く場合\n";
foreach (glob("test_dir/*") as $filename) {
echo $filename."\n";
}
echo "\n*.phpと書く場合\n";
foreach (glob("test_dir/*.php") as $filename) {
echo $filename."\n";
}
echo "\n*.*と書く場合\n";
foreach (glob("test_dir/*.*") as $filename) {
echo $filename."\n";
}
実行結果
>php glob.php
*と書く場合
test_dir/example.sh
test_dir/file1
test_dir/file2
test_dir/file3
test_dir/file4
test_dir/file5
test_dir/sample1.php
test_dir/sample2.php
test_dir/sample3.php
test_dir/sample4.php
test_dir/sample5.php
test_dir/test.txt
*.phpと書く場合
test_dir/sample1.php
test_dir/sample2.php
test_dir/sample3.php
test_dir/sample4.php
test_dir/sample5.php
*.*と書く場合
test_dir/example.sh
test_dir/sample1.php
test_dir/sample2.php
test_dir/sample3.php
test_dir/sample4.php
test_dir/sample5.php
test_dir/test.txt
上記のように、ワイルドカードなどを使用して、パターンマッチングでファイルの一覧を取得し、さらに取得した結果をforeachなどのループ処理に使用することが可能だ。
glob関数の第2引数:オプションフラグについて
glob関数の第2引数に指定できるオプションフラグは、任意で設定することができ、以下の値を設定できる。
オプション |
説明 |
GLOB_MARK |
各ディレクトリにスラッシュを追加することが可能 |
GLOB_NOSORT |
? ディレクトリに存在するファイルを返す |
GLOB_NOCHECK |
? パターンにマッチするファイル無いときに、パターン自体を返す |
GLOB_NOESCAPE |
バックスラッシュを利用した、メタ文字のクォートを行わない |
GLOB_BRACE |
「a」、「b」あるいは「c」のいずれかにマッチさせることが可能 |
GLOB_ONLYDIR |
パターンにマッチするディレクトリのみを返す |
GLOB_ERR |
ディレクトリを無事ができない等のエラーの際は処理を停止 |
上記サンプルプログラムの使い方が基本だが、オプションフラグも使いこなすことでより便利にglob関数を使いこなせると思うのでぜひ頭の片隅に入れておこう。
glob関数の使い方まとめ
- フォルダ名/*とするとフォルダの下のファイル名とフォルダ名を取得する。
- フォルダ名/*.phpとするとPHPファイルのみ取得する。
- フォルダ名/*.*とすると全てのファイル名を取得可能。
https://www.php.net/manual/ja/function.glob.php
コメントを残す