Include dotfiles excluding . and .. special dirs with .[!.]*
<?php
$all_files = array_merge(glob('.[!.]*'), glob('*'));
// or
$all_files = glob('{.[!.],}*', GLOB_BRACE);
?>
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
glob — パターンにマッチするパス名を探す
glob() 関数は libc の glob()
関数で使われるルールに基づいて
pattern
にマッチする全てのパス名を検索します。
ルールは、一般のシェルで使われるルールと似ています。
Unix システムと macOS での振る舞いは、
システムの glob() の実装によって決まります。
Windows の実装は、POSIX 1003.2 の glob() の定義を満たしており、
範囲を否定する規約 [!...]
を扱うための拡張も含んでいます。
pattern
パターン。チルダの展開やパラメータ置換は行いません。
特殊文字は以下のとおりです:
*
- ゼロ文字以上の文字にマッチします。
?
- 正確に(任意の)一文字にだけマッチします。
[...]
- グループ化された文字のうち、一文字にマッチします。
はじめの文字が !
だった場合、
グループにないあらゆる文字にマッチします。
{a,b,c}
- GLOB_BRACE
フラグを使った場合に、コンマで区切った文字列のグループのうち、ひとつにマッチします。
\
- 次に来る文字をエスケープします。
但し、GLOB_NOESCAPE
が使われている場合は除きます。
flags
GLOB_*
定数のいずれか
マッチするファイル/ディレクトリを含む配列を返します。
マッチするファイルがなかった場合には空の配列、
そして失敗した場合には false
を返します。
GLOB_NOSORT
を使わない限り、
名前はアルファベット順にソートされます。
例1 glob() が opendir() と関連する関数群をどのように置き換えられるかを示す簡便な方法
<?php
foreach (glob("*.txt") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}
?>
上の例の出力は、 たとえば以下のようになります。
funclist.txt size 44686 funcsummary.txt size 267625 quickref.txt size 137820
例2 もっと複雑なパターンを使う例
<?php
foreach (glob("path/*/*.{txt,md}", \GLOB_BRACE) as $filename) {
echo "$filename\n";
}
?>
上の例の出力は、 たとえば以下のようになります。
path/docs/mailinglist-rules.md path/docs/README.md path/docs/release-process.md path/pear/install-pear.txt path/Zend/README.md
注意: この関数では、 リモートファイル を 使用することはできません。これは、処理されるファイルがサーバーの ファイルシステムによりアクセスできる必要があるためです。
注意: この関数が使用できないシステムも存在します (例: 昔の Sun OS など)。