17

parent.php:

require_once 'child.php';

child.php:

echo __FILE__;

'.../child.php'と表示されます

どうすれば'.../parent.php'を取得できますか

4

6 に答える 6

20

選択した回答は、サーバー変数を設定する環境でのみ機能し、特に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'];
}
于 2011-04-14T23:08:11.000 に答える
15
print $_SERVER["SCRIPT_FILENAME"];
于 2009-08-23T13:54:28.173 に答える
1

私はあなたがそれをすることができないと思います:__FILE__魔法の定数はそれがどのファイルに書かれているかを示します; それがすべてです。

どのPHPスクリプトが最初に呼び出されたか(たとえば、どのURLが要求されたを知りたい場合は、$_SERVERスーパーグローバルを見るともっと幸運になるかもしれません。 -)SCRIPT_FILENAMESCRIPT_NAME

于 2009-08-23T13:55:30.043 に答える
0

解決策に直接:

親スクリプト:

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__;

あなたはアイデアを得る...

于 2015-07-25T13:59:53.080 に答える
0

を使用する必要があります。basename($_SERVER["SCRIPT_FILENAME"])または、スクリプトnamのみが好きな場合は、を使用できますbasename($_SERVER["SCRIPT_FILENAME"], '.php')

于 2017-02-11T12:41:47.573 に答える
0

これを行うもう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(最初に実行されたスクリプトの絶対パスを取得)でこれに対する解決策を見つけましたが、他のものを探していたので、これが最初に着陸した場所だったので、この質問に変更して追加しました!

于 2020-05-28T03:29:50.237 に答える