【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
【タグ】 - , ,

  関連記事

YouTube Data APIを使って、PHPで『タイトル・動画id・サムネイル画像』などを取得してみる(Search: listリソース)
【別に止めなくてOK】WordPressサイトなどに、アメブロ・fc2など無料ブログの更新情報を表示して連携する方法
【WordPress条件分岐】is_singleとis_singularって違うの?→idやスラッグ指定、投稿タイプ指定の面で違いが
【WordPressカスタムフィールド検索】meta_queryで、シリアライズ値が入ったフィールドを持つ記事をヒットさせるには?
WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示
【画像つきでわかりやすい】WordPressで使われるデータは、MySQLデータベースに、どのように格納されているの?
WordPress記事一覧ページの『本文からの抜粋』を表示する関数と、その文字数の調整方法をチェックする
【WordPress更新情報表示】php/wp組み込みファンクション(fetch_feed)で取得と、プラグインで表示どちらが良い?
テスト環境(ローカル含む)でPHPサイト開発に使えるツール&xamppでやってみた例(設定や表示ファイルetc)
【webサイトセキュリティ対策】検索フォームへのSQL判定などがある不正な入力を、WAFで遮断する
【PHPプログラミング】glob関数を使って、特定ディレクトリ内のファイル一覧取得や、出力を行う方法
WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで