glob

パターンにマッチするパス名を探す

説明

arrayfalse glob(string $pattern, int $flags = 0)

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 globopendir と関連する関数群をどのように置き換えられるかを示す簡便な方法

<?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 など)。

参考

  • opendir
  • readdir
  • closedir
  • fnmatch