ウェブ開発やファイル操作において、特定のディレクトリ内のファイルやディレクトリを一括で取得する必要がある場面は多々あります。
PHPには、このような作業を効率的に行うためのツールとして、glob
関数が提供されています。
glob
関数を使えば、ワイルドカードを駆使して指定ディレクトリ内のファイルやディレクトリを一覧で取得でき、その後の処理に利用することができます。
本記事では、PHPのglob
関数を駆使して、ファイルとディレクトリの一括取得を行う方法について詳しく説明します。これにより、効率的なファイル操作やデータ処理を実現するための基本的なスキルを身につけることができるでしょう。
PHPのglob関数を使ったサンプルコード
PHPのglob関数は指定したパターンにマッチしたパスを配列で取得するための関数です。
指定できるパターンはlibcのglob()関数のルールに基づいており、一般的なシェルで使われるルールに似ています。
以下はglob関数を使用するサンプルコードになります。
<?php
/**
現状のディレクトリ構造
.
├── a.txt
├── b.txt
├── c.txt
├── d.csv
├── dir
│ ├── e.txt
│ ├── f.txt
│ ├── g.txt
│ └── sub
│ ├── h.txt
│ ├── i.txt
│ └── j.txt
├── dir2
│ └── k.txt
└── sample.php
4 directories, 12 files
*/
glob(__DIR__ . '/*');
/**
Array
(
[0] => /path/to/directory/glob/a.txt
[1] => /path/to/directory/glob/b.txt
[2] => /path/to/directory/glob/c.txt
[3] => /path/to/directory/glob/d.csv
[4] => /path/to/directory/glob/dir
[5] => /path/to/directory/glob/sample.php
)
*/
glob('*.txt');
/**
Array
(
[0] => a.txt
[1] => b.txt
[2] => c.txt
)
*/
glob('*/*');
/**
Array
(
[0] => dir/e.txt
[1] => dir/f.txt
[2] => dir/g.txt
[3] => dir/sub
[4] => dir2/k.txt
)
*/
glob('*', GLOB_ONLYDIR);
/**
Array
(
[0] => dir
[1] => dir2
)
*/
glob('{a,b}.txt');
/**
Array
(
)
*/
glob('{a,b}.txt', GLOB_BRACE);
/**
Array
(
[0] => a.txt
[1] => b.txt
)
*/
第1引数にはパターンの指定を行い、第2引数にはフラグ指定が可能です。
指定できるフラグには以下があります。
https://www.php.net/manual/ja/function.glob.php
GLOB_MARK
– 各ディレクトリにスラッシュ (Windows ではバックスラッシュ) を追加しますGLOB_NOSORT
– ディレクトリに存在するファイルを返します (ソートはされません)。このフラグを使わない場合は、パス名をアルファベット順にソートします。GLOB_NOCHECK
– 検索パターンにマッチするファイルが見つからない場合に、 検索パターン自身を返しますGLOB_NOESCAPE
– バックスラッシュによるメタ文字のクォートを行いませんGLOB_BRACE
– {a,b,c} を展開し「a」、「b」あるいは「c」のいずれかにマッチさせますGLOB_ONLYDIR
– パターンにマッチするディレクトリのみを返しますGLOB_ERR
– (ディレクトリが読めないなどの) 読み込みエラー時に停止します。デフォルトではエラーは無視されます。
終わりに
以上、PHPのglob関数の使い方について解説しました。
シェルの操作に慣れていればパターンの設定がわかりやすい、シンプルな関数かと思います。
こちらの情報が皆さんのプロジェクトに活用できましたら幸いです。
コメントを残す