[PHP]includeのパスのあれこれ

Read More

phpのinclude()やrequire()には相対パス、絶対パスが使える。
まあどっちのパスの書き方をしようがそれは自由なのでどうこうは言わない。


俺の場合、大抵はファイルの先頭で
chdir(dirname(__FILE__));
とし自分の位置を固定したあとファイルをインクルードするので、
include('hoge/piyo.php');
とすることが多い。
------------------------
補足:
include('hoge/piyo.php');

include('./hoge/piyo.php');
と同じ。
カレントを見に行く。
------------------------


同じ相対パスでも
include('/hoge/piyo.php');
とはしない。


では
include('/hoge/piyo.php');
としない理由はなにか。


先頭にスラッシュの付くパスの場合そのパスの補完(参照)にはinclude_pathが利用される。
include_pathとはphp.iniのinclude_pathの値。

自分の現在の環境に設定されているinclude_pathの値を確認するには
echo get_include_path();
とするか、
echo ini_get('include_path');
とするか、
phpinfo()を画面出力しブラウザの検索機能(Ctrl+F)で「include_path」で検索すればよい。



さてこのinclude_pathの値とは各自の環境によって簡単に変わるような値。

だから、
その影響を受けるスラッシュ付の相対パスをinclude()に使うな!


…とまではいわん。

が、使うなら使うでini_set('include_path')かset_include_path()で動的に値を埋め込むなりなんなりしとけと。
もしくは.htaccessでプロジェクト個別の設定をもたせるとか。




まあなんでこんなことを今更つらつらと書いているかというと、
今触っているPHPファイルがこの
include('/hoge/piyo.php');
で書かれていたから。


もちろんset_include_path()も.htaccess設定も何もない。


おいおいあんたの環境では動くかもしれんが俺の環境じゃうごかねーよ。



開発をしていていつも思うのだが後から触るやつのこと考えているのかこいつらは。
サーバが変わるという発想はないのか?
自分の環境オンリーなのか?


まだ
include(dirname(__FILE__).'/hoge/piyo.php');
と書いててくれた方がマシだ。

美しくないが。