PHPでフォルダ単位でinclude・requireする方法とコード例

PHPで多くのファイルを include (または require  )したい場面はよくあります。

例えば共通で使われるテンプレートを全てのページでインクルードしたり、あるいは外部のライブラリをインクルードしたり・・・

そういう時にフォルダ単位で include・require する方法とコード例をまとめました。

glob関数を使うのが一番簡単

フォルダ単位の読み込みには glob関数 を使うのが一番簡単ですね。

glob関数というのはlibcのglob関数で使われるパターンにマッチするファイルパスを返す関数のこと。

正規表現のパターンとは少しだけ違います。例えば preg_match  などに渡すパターンは //  (スラッシュ2つ)で囲む必要がありますが、こちらの関数はその必要はありません。

このglob関数を使ってフォルダ単位で読み込みさせる方法は次の通りです。

 

まず次のようなフォルダとファイル構成があるとしましょう。

いわゆるMVCモデルだとviewsフォルダに共通で使うテンプレートファイルを定義するので、そういうのだと思ってください。

 

このケースでviewsフォルダ内のファイル全て include  するコードは次の通り

まずviewsフォルダ内の全PHPファイルに当てはまる 'app/views/*.php'  というパターンを作成。ちなみに先ほど書いたようにパターンは //  で囲む必要はありません。

そして glob( $pattern )  でファイル名リストを取得し、 foreach  の中で1つずつインクルードしていくという流れになっています。

自分もつい最近知ったんですが、この方法はスマートで使いやすいです。

glob関数でincludeする時の注意点

ただしこのglob関数を使って include・require する方法には1つ注意点があります。

それはリモートファイルは指定できない、ということ

リモートファイルっていうのは簡単に言えばURLとほぼ同じです。glob関数にはURLを渡すことができず、渡せるのはファイルパスのみです。

 

例えば次がhttpsプロトコル付きで include  しているエラーになるコード例

こういう風にURLそのものを渡すことはできないので要注意。

この場合に限った話じゃないですが、 include  とか require  する時はプロトコルをつけずに読み込みした方が余計なエラーが起きにくいです。

 

ちなみにもし絶対パスでファイルを指定したい場合 $_SERVER['DOCUMENT_ROOT']  でドキュメントのルートパスが取得できます。

例えば次がルートからのパス指定でviewsフォルダごと include  しているコード

$_SERVER['DOCUMENT_ROOT']  はURLでいえばドメイン直下のパスになるので、あとはそれにフォルダやらファイルの相対パスを書けばOKです。

glob関数を使うときはURLは使わないように気を付けた方がいいですね。

ここまでのまとめ

ということでフォルダ単位の include ・ require についてまとめ

  • glob関数を使うのが一番楽
    この関数に 'app/view/*.php'  みたいなパターンを渡すことで該当する全てのファイル名リストを返してくれる。後は foreach  など使って include  すればOK
  • ただしリモートファイルは指定不可
    例えばプロトコル付きの 'https://xxx.com/app/views/*.php'  みたいなパターンは指定できない。絶対パスで指定するなら $_SERVER['DOCUMENT_ROOT']  を使うこと

もし全部手動で include  したり require  すると大変ですが、これを使えば動的に読み込みできます。大量のファイルを扱う時に大活躍しそうなテクニックです。

以上、PHPでフォルダ単位でファイル読み込むする方法についてでした。ではでは

PHP

Commentsこの記事についたコメント

コメントを残す

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

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください