[PHP] ファイルには絶対パスでアクセスする

include などでファイルを参照するとき、 ../hoge.php と書くと、”今いる場所を基準”として相対的な位置にあるファイルを探すことになります。この書き方を【相対パス】と呼びます。
ところで、”今いる場所を基準”とするわけですが、今いる場所ってどこでしょうか?
それは、プログラムが開始するPHPファイルのディレクトリです。

コード中で、 includeやrequireを多用していると、どのPHPファイルを基準とした相対パスなのか分からなくなってきます。さらに、includeした中で、includeしてたりすると、相対パスだけではどうにもならなくなります。

相対パスの反対が、【絶対パス】です。絶対パスは、 /home/hoge/public_html/fuga.php のように、パスを省略しない書き方で、絶対パスで示されるファイルは確実にそのファイルを指す事になります。

コンピュータの目線で考えても、相対パスの場合、現在のパスを基に絶対パスを作り出す必要があるわけです。絶対パスなら、その過程を飛ばせることになるので、多少の速度アップというメリットも付いてきます。

ここからは私の手法になりますが・・・
server_dependence.php というファイルを新規作成します。
【server dependence】は、【サーバ依存】という意味です。

server_dependence.phpには、次のコードを含めます。

<?php
// 本システムのルートディレクトリ
define('C_PATH_ROOT', '/hoge/fuga/');
// ドキュメントルート
define('C_PATH_PUBLIC', C_PATH_ROOT. 'public_html/');
// プログラムコードを格納
define('C_PATH_PROGRAM', C_PATH_ROOT . 'program/');

C_PATH_ROOT には、開発しているシステムに必要なファイル全てを格納する最上部のディレクトリを指定します。
例の /hoge/fuga/ では、fugaの中に全てのファイルを格納することになります。

C_PATH_ROOT が決まってしまえば、残りは必要に応じて、ディレクトリを定義していきます。

そしてPHPファイルの中で次のように使います。

include C_PATH_PROGRAM . 'piyo.php';

C_PATH_PROGRAM には、/hoge/fuga/program/ が入っているので、

include '/hoge/fuga/program/piyo.php';

このように、記述したのと同じ意味になります。

開発環境は自分のPCで、本番環境はレンタルサーバなどの場合、全く同じディレクトリ名にプログラムを配置するのは難しいことと思います。

このように定数宣言しておけば、define('C_PATH_ROOT', '/hoge/fuga/'); の箇所を変更するだけで、どこのディレクトリに配置しても動作できるようになります。

※C_PATH_ROOT 以下は、開発環境・本番環境ともに全く同じ構成です。