dirname(__FILE__) か__DIR__ か

  • 公開日:2016/10/27
この記事は最終更新日から7年以上が経過しています。

絶対パスの取得にdirname(__FILE__)__DIR__が使われていますが、この二つはどう違うのでしょうか?
どちらを使えばいいのか迷ったので調べてみました。

__FILE____DIR__もPHPのマジカル定数です。

__FILE__
ファイルのフルパスとファイル名(シンボリックリンクを解決した後のもの)。インクルードされるファイルの中で使用された場合、インクルードされるファイルの名前が返されます。

__DIR__
そのファイルの存在するディレクトリ。includeの中で使用すると、インクルードされるファイルの存在するディレクトリを返します。つまり、これはdirname(__FILE__)と同じ意味です。ルートディレクトリである場合を除き、ディレクトリ名の末尾にスラッシュはつきません。

参考 PHPマニュアル:自動的に定義される定数

というわけで、dirname(__FILE__)__DIR__は同じ結果になります。
違いは何だというと__DIR__はPHP5.3から追加されました。
そのため古いPHPを使わざるを得ない環境にはdirname(__FILE__)が残りますが、PHP5.3以降が使用できる環境であれば、__DIR__を使えばいいと思います。

require_once( __DIR__ . '/config.php');