2012-05-01 21 views
11

PHP includeを使用している場合、どのファイルがincludeを呼び出すのかはどのようにして知ることができますか?要するに、親ファイルのファイル名は何ですか?PHPを実行したファイルのファイル名を取得する

+0

より良い質問は、なぜこれを知る必要があるのですか?おそらく、あなたが達成しようとしていることを明示的に行うより良い方法があります。 – Zimzat

答えて

11

簡単な方法は、(inclueの前に)親ファイルに変数を割り当て、その変数をインクルードファイルで参照することです。

親ファイル:

$myvar_not_replicated = __FILE__; // Make sure nothing else is going to overwrite 
include 'other_file.php'; 

付属ファイル:

if (isset($myvar_not_replicated)) echo "{$myvar_not_replicated} included me"; 
else echo "Unknown file included me"; 

あなたはget_included_files()またはdebug_backtrace()と周りの混乱もでき、いつ、どこでファイルが得たイベントを見つけます含まれていますが、それはちょっと乱雑で複雑になることがあります。

9
$fileList = get_included_files(); 
$topMost = $fileList[0]; 
if ($topMost == __FILE__) echo 'no parents'; 
else echo "parent is $topMost"; 

これは、単一の親がある場合、これが正しい結果をもたらすはずだと思います。

これは、親が必須ファイルではない、つまりインクルードされているファイルそのものを意味しています。

9

後期の答えが...

私が使用して、実行中の親ファイル名を確認してください:子ファイルを含む前にこの行を追加し、

$_SERVER["SCRIPT_NAME"] // or 
$_SERVER["REQUEST_URI"] // (with query string) 
+1

これは、インクルード用のコンテナファイルを編集することなく正解を与えるので、より高い評価を受けるべきです。私はコンテナファイルの名前が必要なインクルードを持っています。これは他の答えが示唆しているように100以上の他のページで '$ var'値を変更するのを打ち負かします。 – Martin

+1

**誤った誤解**! 'SCRIPT_NAME'は最初のファイルを返します。 'REQUEST_URI'は問題ありません!彼らはどんなCMSでも役に立たない。 'debug_backtrace()'や 'get_included_files()'を使用してください。 –

+0

@ T.Toduaこれらの修飾子は有効ですが、この質問(および回答)の範囲外です。 '$ _SERVER ['SCRIPT_NAME']'はここで必要な値です。 – Martin

0

を親ファイルで:

$_SESSION['parent_file'] = $_SERVER['PHP_SELF']; 

子ファイルで、セッション変数を読み取ります。

$parent_file = $_SESSION['parent_file'] 
関連する問題