PHPのお勉強!

PHP TOP

glob

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

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

説明

glob(string $pattern, int $flags = 0): array|false

glob() 関数は libc の glob() 関数で使われるルールに基づいて pattern にマッチする全てのパス名を検索します。 ルールは、一般のシェルで使われるルールと似ています。

パラメータ

pattern

パターン。チルダの展開やパラメータ置換は行いません。

Special characters:

  • * - ゼロ文字以上の文字にマッチします。
  • ? - 正確に(任意の)一文字にだけマッチします。
  • [...] - グループ化された文字のうち、一文字にマッチします。 はじめの文字が ! だった場合、 グループにないあらゆる文字にマッチします。
  • \ - 次に来る文字をエスケープします。 但し、GLOB_NOESCAPE が使われている場合は除きます。

flags

有効なフラグは次のとおりです。

GLOB_BRACE (int)
{a,b,c} を 'a', 'b', 'c' にマッチさせるように展開します。

注意: GLOB_BRACE は GNU システムでないシステムによっては使えない場合があります。 使えないシステムの例として、Solaris や Alpine Linux があてはまります。

GLOB_ERR (int)
(ディレクトリが読み取れない場合のような) 読み取りエラーの場合に停止します。 デフォルトでは、エラーは無視されます。
GLOB_ONLYDIR (int)
パターンにマッチするディレクトリエントリのみを返します。
GLOB_MARK (int)
スラッシュ(Windows の場合はバックスラッシュ) を返されるディレクトリに個別に追加します。
GLOB_NOSORT (int)
ディレクトリ内に存在するかのように、ファイルを返します(ソートは行いません)。 このフラグを使わない場合、パス名はアルファベット順でソートされます。
GLOB_NOCHECK (int)
マッチするファイルが見つからない場合に、検索パターンを返します。
GLOB_NOESCAPE (int)
バックスラッシュは、メタキャラクタをクォートしません。
GLOB_AVAILABLE_FLAGS (int)
すべての GLOB_* フラグの組み合わせです。 0 | GLOB_BRACE | GLOB_MARK | GLOB_NOSORT | GLOB_NOCHECK | GLOB_NOESCAPE | GLOB_ERR | GLOB_ONLYDIR と等しくなります。

戻り値

マッチするファイル/ディレクトリを含む配列を返します。 マッチするファイルがなかった場合には空の配列、 そして失敗した場合には false を返します。

注意:

システムによっては、何もマッチしなかった場合とエラーが発生した場合を区別できないものもあります。

例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

注意

注意: この関数では、 リモートファイル を 使用することはできません。これは、処理されるファイルがサーバーの ファイルシステムによりアクセスできる必要があるためです。

注意: この関数が使用できないシステムも存在します (例: 昔の Sun OS など)。

参考

  • opendir() - ディレクトリハンドルをオープンする
  • readdir() - ディレクトリハンドルからエントリを読み込む
  • closedir() - ディレクトリハンドルをクローズする
  • fnmatch() - ファイル名がパターンにマッチするか調べる

add a note

User Contributed Notes 1 note

up
4
Anonymous
3 years ago
Include dotfiles excluding . and .. special dirs with .[!.]*

<?php
$all_files
= array_merge(glob('.[!.]*'), glob('*'));
// or
$all_files = glob('{.[!.],}*', GLOB_BRACE);
?>