PHPのglob関数を使ったファイルとディレクトリの一括取得

ウェブ開発やファイル操作において、特定のディレクトリ内のファイルやディレクトリを一括で取得する必要がある場面は多々あります。

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引数にはフラグ指定が可能です。

指定できるフラグには以下があります。

  • GLOB_MARK – 各ディレクトリにスラッシュ (Windows ではバックスラッシュ) を追加します
  • GLOB_NOSORT – ディレクトリに存在するファイルを返します (ソートはされません)。このフラグを使わない場合は、パス名をアルファベット順にソートします。
  • GLOB_NOCHECK – 検索パターンにマッチするファイルが見つからない場合に、 検索パターン自身を返します
  • GLOB_NOESCAPE – バックスラッシュによるメタ文字のクォートを行いません
  • GLOB_BRACE – {a,b,c} を展開し「a」、「b」あるいは「c」のいずれかにマッチさせます
  • GLOB_ONLYDIR – パターンにマッチするディレクトリのみを返します
  • GLOB_ERR – (ディレクトリが読めないなどの) 読み込みエラー時に停止します。デフォルトではエラーは無視されます。
https://www.php.net/manual/ja/function.glob.php

終わりに

以上、PHPのglob関数の使い方について解説しました。

シェルの操作に慣れていればパターンの設定がわかりやすい、シンプルな関数かと思います。

こちらの情報が皆さんのプロジェクトに活用できましたら幸いです。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA