[PHP] dirname(__FILE__)で上の階層のパスを指定する方法

PHP

includeや、requireとかでファイルを呼び出すときは、「require_once ( dirname(__FILE__) . 'ファイルまでのパス' )」のように絶対パスで書く。このとき、呼び出すファイルが一つ上のディレクトリだった場合、かなり上の階層にいる場合の書き方をいつも忘れるのでメモ。

dirname(__FILE__)とは

指定したファイル(__FILE__の値)の親ディレクトリのパスを取得するもの。

dirname( string $path ) : 親ディレクトリのパスを返す関数。引数「$path」にファイル名やディレクトリのパスを指定


__FILE__ : PHPの中で、マジカル定数と呼ばれている定数。ファイルのフルパスとファイル名 (シンボリックリンクを解決した後のもの)が格納されている。 インクルードされるファイルの中で使用した場合、インクルードされるファイルの名前が返される。


__DIR__ : PHP5.3から登場したマジカル定数。そのファイルの存在するディレクトリが格納されている。インクルードの中で使用すると、 インクルードされるファイルの存在するディレクトリを返す。ディレクトリ名の末尾にスラッシュはつかない。


dirname(__FILE__)と、__DIR__は同じ結果を返す。
dirname(__FILE__)で返ってくるディレクトリ名の末尾にスラッシュはつかない。

書き方

同じ階層を取得


require_once( dirname(__FILE__). '/hoge.php');
// または
require_once( __DIR__ . '/hoge.php');

1つ上の階層を取得


require_once ( dirname(__FILE__) . '/../hoge.php');
// または
require_once ( __DIR__ . '/../hoge.php');

5つ上の階層を取得

ルートパス/htdocs/test/dir1/dir2/dir3/dir4/dir5/foo.phpから、 5つ上の階層にあるルートパス/htdocs/test/coo.phpをincludeで呼び出す場合、

方法1
include_once(dirname(__FILE__) ."/../../../../../coo.php");
方法2
require_once( dirname( __FILE__ , 6) . '/coo.php' );

dirname()の第二引数に、どれだけ上に上がりたいか、階層の数を指定することができる。

方法3
require_once( dirname(dirname(dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) ) ) . '/coo.php' );

foo.phpで、echo dirname( __FILE__ );すると、「/ルートパス/htdocs/test/dir1/dir2/dir3/dir4/dir5」と出力される。

Posted by Agopeanuts