let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

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

更新: 2024/02/10 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で記事を取って一覧でだす)』みたいなのに使えないか検討しています。


【カテゴリ】- PHP
【タグ】- , ,

関連記事