[PHP] 相対パスで多重include(require)でエラー

投稿


下のようなファイル構成で、

<?php
    // index.php
    include('widget/widget.php');
?>
<?php
    // widget.php
    include('../lib/lib.php');
?>

のように、index.php ―(include)→ widget.php ―(include)→ lib.phpと多重includeして、index.phpを実行すると…

“Warning: include(../lib/lib.php) [function.include]: failed to open stream: No such file or directory in /htdocs/widget/widget.php on line 2″
とエラーが出る。

これは実行しているphpファイルのパスがカレントディレクトリになるというphpの仕様があるため、相対パス指定がおかしくなってしまうためです。(C言語のプリプロセッサに慣れてるひとは注意!)

ということで、絶対パスを指定することになります。
ファイル自身の絶対パスは、
dirname(__FILE__)
で取得できるので、具体的には、

<?php
    //widget.php
    include(dirname(__FILE__) . '/../lib/lib.php');
?>

とすればOK。





↓ コメントをどうぞ (URLが含まれるコメントは承認後表示されます) ↓

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