Php - 获取父脚本名称

时间:2009-08-23 13:52:08

标签: php parent

parent.php:

require_once 'child.php';

child.php:

echo __FILE__;

它会显示'... / child.php'

我怎样才能得到'... / parent.php'

6 个答案:

答案 0 :(得分:19)

所选答案仅适用于设置服务器变量的环境,特别是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'];
}

答案 1 :(得分:13)

print $_SERVER["SCRIPT_FILENAME"];

答案 2 :(得分:1)

我认为你不能这样做:__FILE__魔术常量表示它写在哪个文件中;就是这样。

如果你想知道最初调用哪个PHP脚本(例如,请求了哪个URL),你可能会看到$_SERVER超全局的更多运气:它包含许多信息,包括一些可以帮助你的信息(例如SCRIPT_FILENAMESCRIPT_NAME; - )

答案 3 :(得分: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__;

你明白了......

答案 4 :(得分:0)

您必须使用DataGrid,或者,如果您只使用脚本nam,则可以使用for (var rowIndex = 0; rowIndex < data.Rows.Count; rowIndex++) { dynamic row = new ExpandoObject(); for (var i = 0; i < data.Columns.Count; i++) // Create variables named after bindings, and assign values ((IDictionary<string, object>)row)[data.Columns[i].ColumnName.Replace(' ', '_')] = data.Rows[rowIndex].ItemArray[i]; // Add row to DataGrid dg.Items.Add(row); }

答案 5 :(得分:0)

执行此操作的另一种方法(在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(Get absolute path of initially run script)上的其他地方找到了解决方案,同时寻找了其他东西,因此修改并添加到此问题中,因为这是我首先登陆的地方!