Php - get parent-script name

parent.php:

require_once 'child.php';

child.php:

echo __FILE__;

Он покажет '.../child.php'

Как я могу получить '.../parent.php'

Ответ 1

print $_SERVER["SCRIPT_FILENAME"];

Ответ 2

Выбранный ответ работает только в средах, которые устанавливают переменные сервера и, в частности, не работают из CLI script. Кроме того, он не определяет родителя, а только самый верхний script файл.

Вы можете сделать почти то же самое из CLI script, посмотрев на $argv [0], но это не обеспечивает полный путь.

Не зависящее от среды решение использует 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'];
}

Ответ 3

Я не думаю, что вы можете это сделать: магическая константа __FILE__ указывает, в каком файле она написана; и это все.

Если вы хотите узнать, какой изначально был вызван PHP script (какой URL был запрошен, например), у вас может быть больше удачи, смотря на суперклассу $_SERVER: он содержит много информации, в том числе некоторые, которые помогут вам (например, SCRIPT_FILENAME или SCRIPT_NAME); -)

Ответ 4

Прямо к решению:

Родительский Script:

echo $_SERVER['SCRIPT_FILENAME'];

Ребенок Script (включенный файл в родительском script):

echo __FILE__;

Создайте файл с именем "parent.php" с содержимым:

include('child.php');

Создайте файл с именем "child.php" с содержимым:

echo "My Parent is at: " . $_SERVER['SCRIPT_FILENAME'] . "<br>";
echo "I'm at: " .  __FILE__;

Вы получаете идею...

Ответ 5

Вы должны использовать basename($_SERVER["SCRIPT_FILENAME"]) или, если вам нравится только script nam, вы можете использовать basename($_SERVER["SCRIPT_FILENAME"], '.php').