parent.php:
require_once 'child.php';
child.php:
echo __FILE__;
'.../child.php'と表示されます
どうすれば'.../parent.php'を取得できますか
選択した回答は、サーバー変数を設定する環境でのみ機能し、特にCLIスクリプトからは機能しません。さらに、親を決定するのではなく、最上位のスクリプトファイルのみを決定します。
$ argv [0]を調べることで、CLIスクリプトからほぼ同じことを実行できますが、フルパスは提供されません。
環境に依存しないソリューションは、debug_backtraceを使用します。
function get_topmost_script() {
$backtrace = debug_backtrace(
defined("DEBUG_BACKTRACE_IGNORE_ARGS")
? DEBUG_BACKTRACE_IGNORE_ARGS
: FALSE);
$top_frame = array_pop($backtrace);
return $top_frame['file'];
}
print $_SERVER["SCRIPT_FILENAME"];
私はあなたがそれをすることができないと思います:__FILE__
魔法の定数はそれがどのファイルに書かれているかを示します; それがすべてです。
どのPHPスクリプトが最初に呼び出されたか(たとえば、どのURLが要求されたか)を知りたい場合は、$_SERVER
スーパーグローバルを見るともっと幸運になるかもしれません。 -)SCRIPT_FILENAME
SCRIPT_NAME
解決策に直接:
親スクリプト:
echo $_SERVER['SCRIPT_FILENAME'];
子スクリプト(親スクリプトに含まれるファイル):
echo __FILE__;
次の内容の「parent.php」というファイルを作成します。
include('child.php');
次の内容の「child.php」というファイルを作成します。
echo "My Parent is at: " . $_SERVER['SCRIPT_FILENAME'] . "<br>";
echo "I'm at: " . __FILE__;
あなたはアイデアを得る...
を使用する必要があります。basename($_SERVER["SCRIPT_FILENAME"])
または、スクリプトnamのみが好きな場合は、を使用できますbasename($_SERVER["SCRIPT_FILENAME"], '.php')
。
これを行うもう1つの方法(ApacheとCLIの両方で機能します)は、get_included_files()
関数を使用することです。含まれているすべてのファイル(最初の呼び出しスクリプトを含む)を実行された順序で配列を返します。
get_included_files()[0]
=初期スクリプトのフルパス。
例えば
/myscripts/Parent.php
<?php
echo("Called from parent: ".get_included_files()[0]."\r\n");
include("/otherscripts/Child.php");
echo("Called again from parent: ".get_included_files()[0]."\r\n");
?>
/otherscripts/Child.php
<?php
echo("Called from child: ".get_included_files()[0]."\r\n");
?>
出力:
> php /myscripts/Parent.php
Called from parent: /myscripts/Parent.php
Called from Child: /myscripts/Parent.php
Called again from parent: /myscripts/Parent.php
私は最終的にstackoverflow(最初に実行されたスクリプトの絶対パスを取得)でこれに対する解決策を見つけましたが、他のものを探していたので、これが最初に着陸した場所だったので、この質問に変更して追加しました!