WEBエンジニアGirls!!

今までプログラミングに触れたことがなかった女子たちが、就職・インターンを機にイケてるWEBエンジニアを目指す七転び八起きをゆるーり綴ります( ´ω`)

PHPのincludeで相対パスを指定してファイルを読み込む!

こんにちは、WEBエンジニアのあじゃです(θωθ っ )3~

知っていれば一瞬!なことなのですが、

「あれ?PHPのincludeで違うディレクトリにあるファイルを読み込むとエラーになる・・・」
ということがあったので対応策を!

例えば、こんなディレクトリ構成のファイルがあるとします。

home/
|-index.php
|
|-common/
|  |-footer.php
|
|-user/
   |-top.php

ここで、home/index.phpの内部で、home/common/footer.phpを読み込みたい時は

<?php
include("common/footer.php");
?>

でOKなのですが、

ここで、home/user/top.phpの内部で、home/common/footer.phpを読み込もうとして

<?php
include("../common/footer.php");
?>

とすると、

「そんなもんないよ!!」と怒られてしまいます。
Warning: include(../common/footer.php) [function.include]: failed to open stream: No such file or directory in home/user/top.php on line 2


PHPでは、
「実行したファイルのあるディレクトリ=実行時のカレントディレクトリ」
というルールがあるため、

エラーになっている上記のコードでは、
実行したファイルのディレクトリ = home/user/ = カレントディレクトリ
となり、
探しに行っているファイル = home/user/../common/footer.php
となっているのでエラーになってしまうのです。

そのため、
dirname(__FILE__) を使って、実行している現在参照中のファイルのフルパスを使うことで、
このエラーを回避します!

具体的にかくと・・・
home/user/top.phpの内部で、home/common/footer.phpを読み込みたいときは

<?php
include(dirname(__FILE__) . "/../common/footer.php");
?>

となります!