PHPで現在実行中ファイルのpath(パス)を取得する方法

  • 投稿 : 2016-10-26
__FILE__ ファイルのフルパスとファイル名 (シンボリックリンクを解決した後のもの)。 インクルードされるファイルの中で使用された場合、インクルードされるファイルの名前が返されます。
__DIR__ そのファイルの存在するディレクトリ。include の中で使用すると、 インクルードされるファイルの存在するディレクトリを返します。 つまり、これは dirname(__FILE__) と同じ意味です。 ルートディレクトリである場合を除き、ディレクトリ名の末尾にスラッシュはつきません。
PHP: 自動的に定義される定数 - Manual

dirname() - 親ディレクトリのパスを返す
basename() - パスの最後にある名前の部分を返す
realpath() - 絶対パス名を返す
getcwd() - カレントのワーキングディレクトリを取得する

PHP5.3あたりから「__DIR__」が定義されたので、PHP5.3以降で実行することが保証されている場合は dirname(__FILE__) よりも__DIR__のほうがよいと思う。

確認用のPHP(test01.php)
<?php 
// (1)現在のファイルまでの絶対パス
echo __FILE__;
echo "\n";

// (2)現在のフォルダまでのパス
echo __DIR__;
echo "\n";

// (3)現在のフォルダまでのパス
echo dirname(__FILE__);
echo "\n";

// (4)現在のスクリプト名
echo basename(__FILE__);
echo "\n";

// (5)現在のフォルダ名
echo basename(realpath("./"));
echo "\n";

// (6)カレントフォルダ名
echo getcwd();
echo "\n";

実行結果
/home/example/example.webcrow.jp/public_html/test01.php
/home/example/example.webcrow.jp/public_html
/home/example/example.webcrow.jp/public_html
test01.php
public_html
/home/example/example.webcrow.jp/public_html

動作確認:
無料で使えるホームページサービス! ウェブクロウ」で「PHP・MySQLオプション」を利用してます
管理画面で、PHPのバージョンが切り変え可能で、PHP7,PHP5.6、PHP5.3あたりは使えます。

include、requireのパス指定

//PHPのバージョンが5.3.0より前
include(dirname(__FILE__) . '/c.php');
//phpのバージョンが5.3.0以降のみ
include(__DIR__ . '/c.php');
上の例を説明すると、b.php が存在しているディレクトリの絶対パスを取得して、c.php (2) のパスを絶対パスで指示するようにしています。
ここでの絶対パスとは、フルパスの事で、ドキュメントルート(サイトルート)からのパスではありません。
PHPでincludeの時、ファイルパスの指示の仕方。 | WEBデザイン&WEBプログラミング -sei2の日記-

dirname(__FILE__)または__DIR__を使用して指定しておくとよい。
理由はわからなくても機械的にそうしておけば、問題ない。

スポンサーリンク

タグ#PHP#code