【PHPプログラミング】glob関数を使って、特定ディレクトリ内のファイル一覧取得や、出力を行う方法

                      2235文字

今回は、お仕事で使ったわけではないんですが、管理人がフラットファイルCMSを作ろうとして調べていた中で、使えそうなものを紹介します。お題はPHPのファンクション『glob』。ディレクトリ内のファイルを検索したりできるようです。さっそく、動作を確認してみましょう。

PHP globとは?

『パターンにマッチするパス名を探す/戻り値はマッチするファイル、ディレクトリを含む配列』というファンクションです。パラメーターには『パターン』『フラグ』があり、『$〇〇=glob(‘パターン’,フラグ)』のように使います。

PHPマニュアルによると、パターン内で『*(ゼロ文字以上の文字にマッチ)』『?(一文字にだけマッチ)』のような特殊文字も使えます。正規表現マッチみたいなのをやっておくと、イメージがつかみやすいかもしれません。

glob関数を使って、特定ディレクトリ内のファイル一覧取得する方法

下準備~xampp/htdocs内に、ファイルを入れておく


サーバーでもできるんですけど、とりあえずxamppで行います。こんな感じで、xampp/htdocsに2022-10-fileupというフォルダをつくりまして、imagesというフォルダも作っておきます。edit.phpというのがプログラム&表示部分で、同じ階層にあります。


さらにその中に、画像を入れておきます。なお、画像は管理人が作ったお料理です。このほかにもjsonが入っている、textというフォルダがあります。phpのファイルアップロード関数&フォームを使って、アップしていくというのもできますね。

glob関数でファイル一覧取得、foreachでループ回して出力


で、glob関数で一覧を取ってforeachでループ回して出力してみます。
パターンは『./images/(同じ階層にあるimagesフォルダ)*(任意のゼロ文字以上の文字。ファイル名。) . *(任意のゼロ文字以上の文字。拡張子。)』というもの。
別にこの書き方でなくても、『./images/*.jpg』と書いても出ます(拡張子がjpgの画像しか入っていないから)。


このように、画像のファイル名一覧がでます。『images』は要らなくて、ファイル名だけほしい場合は、他の関数を組み合わせて出力させます。


その他、jsonファイルが入っているフォルダーについても、globで取得してみます。パターンは『./text/(同じ階層にあるtextフォルダ) *(任意のゼロ文字以上の文字)』というもの。いろいろ入っているフォルダの場合は、パターンで拡張子指定してもよさそうです。


とりあえず、パターンをちょっと変えれば、他のフォルダーや他の拡張子でも取れていますね。

glob関数・ちょっと応用~画像出力や、ファイル名だけ取得

globで取ってきた画像ファイル一覧を、タグと組み合わせてループ出力


『パターンにマッチするパス名を探す』という機能でしたが、画像タグと組み合わせれば、画像を実際に見られる形で出力できます。やり方はforeachループ内に画像タグを入れるだけ。サイズ指定や、外のボックスに横並びにするflexが入っていますが、お好みで。
$valueは『/images/〇〇.jpg』という形になっているので、タグのsrcに入れれば画像がでます。


こんな感じで、画像一覧が出てきます。5枚なので気になりませんが、画像や要素が増える場合は、flexの折り返しも入れておきましょう(flexboxを使う場合)。

フォルダ名じゃなくて、ファイル名だけほしい(basename関数)


状況によっては、『フォルダ名じゃなくて、ファイル名だけほしい』という場合があるかもしれません。そういうときはPHPの『basename関数』を使用。
値をechoするときに、こんな感じでかませてやると・・・


『text/〇〇.json』みたいな形式でなく、ファイル名だけが出てきます。

あとがき・まとめ

  • パターンマッチするパス名を探す関数・globで特定フォルダや特定ファイル一覧を取得できる
  • ループ内に画像やリンクのタグを入れて使うこともできる
  • basename関数と組み合わせて、ファイル名だけの一覧も出せる

まとめると、こんなところでしょうか。管理人的には、現在『フラットファイルCMS・管理画面や一覧表示画面(jsonやxmlで記事を取って一覧でだす)』みたいなのに使えないか検討しています。

WordPressサイト制作&リニューアル・機能開発サービス | アトリエSS


【カテゴリ】 - PHP・データベースetc
【タグ】 - , ,

  関連記事

WordPressの記事IDで判定して転送~PHP・headerとget_the_IDで対応、the_IDとの挙動の違いも
【WPカスタマイズ】プラグイン不使用、テーマに関連記事表示機能を実装しPV・滞在時間を上げる
【WP記事取得クエリ・プラグイン無し】お知らせなどに使える、ショートコードで特定カテゴリ記事を表示プログラム
【WordPressでPHPプログラムを学習シリーズ1】用語:PHP変数・関数・定数を、WPの機能を通して覚える
【PHP学習】var_dumpで出力するのと、echoで出力するのは、挙動がどのように違うの?
WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで
【WordPressカスタムフィールド検索】meta_queryで、シリアライズ値が入ったフィールドを持つ記事をヒットさせるには?
PHP・shuffleやarrayを使った、画像ランダム表示方法~メインビジュアルやバナー・テキストにも利用可能
【超危険】WordPressデータベースリビジョンお掃除
【別に止めなくてOK】WordPressサイトなどに、アメブロ・fc2など無料ブログの更新情報を表示して連携する方法
【WordPressで覚えよう】PHP「->」(オブジェクト演算子/アロー演算子)・「=>」(ダブルアロー演算子)の違い
【WPユーザー名バレ対策】ユーザー名表示からPHP・preg_matchでリダイレクト(wp-json/wp/v2/usersなど)