PHPには非常に多くの関数が用意されています。今回は便利ながら意外と知られていないglob関数を紹介したいと思います。

glob関数は指定したパターンにマッチするパス名をリスト化して返してくれる関数です。

たとえば、

a.txt b.jpg c.png d.txt

といったファイルが同一階層上にある時、

print_r(glob("*.txt"));

を行うと以下のような結果になります。

Array
(
    [0] => a.txt
    [1] => d.txt
)

これを利用すると、ディレクトリ内のjpg画像を全て表示させたい場合などは、以下のようにglob関数を使用することができます。

foreach (glob("*.jpg") as $filename) {
    echo '<img src="' . $filename . '" alt="' . $filename . '" />';
}

また、glob関数には二つ目の引数をオプションとして指定することができます。これには以下のような定数を指定することができます。

  • GLOB_MARK - 各戻り値にスラッシュを追加します
  • GLOB_NOSORT - ディレクトリに存在するファイルを返します (ソートはされません)
  • GLOB_NOCHECK - 検索パターンにマッチするファイルが 見つからない場合に検索パターン自身を返す
  • GLOB_NOESCAPE - バックスラッシュによってメタ文字をクォートしません
  • ここでは、中でもよく使う GLOB_ONLYDIR と GLOB_BRACE を詳しく紹介したいと思います。

    GLOB_ONLYDIR はその名の通りディレクトリだけを取得するために使用するオプションです。

    このオプションを指定すると、結果にはパターンにマッチしたディレクトリ名だけが入るようになります。

    この GLOB_ONLYDIR は、PHP 4.3.3以前のバージョンだとWindows上では使用することはできません。

    GLOB_BRACE は、複数のパターンを指定するために使用するオプションです。これを指定すると、パターンの指定に複数の指定を組み合わせることができるようになります。

    ほどの例を使用すると、

    foreach (glob("{*.jpg,*.jpeg,*.gif,*.png}", GLOB_BRACE) as $filename) {
        echo '<img src="' . $filename . '" alt="' . $filename . '" />';
    }

    上記のようにパターンを指定すると、拡張子がjpg,jpeg,gif,pngのファイルを全て取得し、表示させることができます。

    また、PHP 5.1からは新しく GLOB_ERR オプションが追加されました。glob関数で、ファイル読み込み時にエラーが発生しても通常はエラーは無視されてしまうのですが、このオプションを指定すると、エラー発生時には処理を停止させることが出来るようになります。

    PHPでファイルの管理を行うときはとても便利な関数なので、ぜひ有効活用しましょう。