require_onceでの相対パス指定で上位階層のモジュールが読み込めない
ハマった問題点
上位階層のlib内にあるモジュールを読み込もうとしたら以下のエラーで参照ができない。
Warning: main(../hoge/a.php) [function.main]: failed to open stream: No such file or directory in 〜/test/lib/d.php on line 〜
b.php内にてモジュールを参照するケース
c.phpをrequire_once ⇒ OKケース
require_once(../lib_master/c.php);
d.phpをrequire_once ⇒ NGケース
require_once(./../../lib/d.php);
上記サンプルの階層イメージ
.test │ ├─hoge │ └─a.php │ ├─master │ └─sub │ ├─b.php │ └─lib_master │ └─c.php │ └─lib └─d.php
解決策あれこれ
解決策1 自分自身のパスを取得して絶対位置指定
dirname(__FILE__) によって自身のモジュールの絶対パスを取得し、それからd.phpまでの位置を連結してrequire_onceします。
require_once dirname(__FILE__) . './../../lib/d.php';