[PHP] dirname(__FILE__)で上の階層のパスを指定する方法
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で呼び出す場合、
include_once(dirname(__FILE__) ."/../../../../../coo.php");
方法2
require_once( dirname( __FILE__ , 6) . '/coo.php' );
dirname()
の第二引数に、どれだけ上に上がりたいか、階層の数を指定することができる。
require_once( dirname(dirname(dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) ) ) . '/coo.php' );
foo.phpで、echo dirname( __FILE__ );
すると、「/ルートパス/htdocs/test/dir1/dir2/dir3/dir4/dir5
」と出力される。