昨日のエントリーで MAMP で PHP の inlude を使う場合についてを書きました。
MAMP は PHP の include がデフォルトでできる!しかし…
共通部をパーツに分離してインクルードして使うのは、 PHP に限らず、コーディングを効率よく進めるためには必要なことだと思いますし、自分も以前はよく利用していました。今でも必要な場合は PHP でインクルードの設定をしてコーディングをしています。
PHP で include を使う場合、小規模で階層を気にせずに作れるサイトであれば、相対パスで読み込みすればいいだけですが、多階層の場合、相対パスで include するよりもドキュメントのルートをとっておき、そのパスを使いまわす方が効率的だったりします。
そのパスの取り方について、自分も毎回検索してしまっているので、ここにメモしておこうと思います。
ドキュメントルートを利用して読み込む場合
例えばこんなような場合。
- index.php
- common
- module
- header.php
- footer.php
- module
- about
- second.php
second.php から common の module をインクルードする場合、相対パスなら ../../common/module/header.php
となります。
ここで、絶対パスの /common/module/header.php
も使えるのかと思い指定しても、エラーとなって利用できない。そのため、ドキュメントルートと組み合わせて使う必要がでてくる。
そのドキュメントルートを利用する場合は下記のように指定する。
<?php
$webroot = $_SERVER['DOCUMENT_ROOT'];
include($webroot."/common/include/header.php");
?>
ブラウザ経由での利用のみの想定のため、$_SERVER['DOCUMENT_ROOT'];
を利用しています。getenv(‘DOCUMENT_ROOT’);
でもパスは取れるのですが、同じのが取れるような状態のときは前者のほうが環境変数を表示するだけのようなので早いようです。