【问题标题】:Php - get parent-script namephp - 获取父脚本名称
【发布时间】:2010-11-22 01:28:29
【问题描述】:

父.php:

require_once 'child.php';

child.php:

echo __FILE__;

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

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

【问题讨论】:

    标签: php parent


    【解决方案1】:
    print $_SERVER["SCRIPT_FILENAME"];
    

    【讨论】:

    • 这不是正确的答案。它正在返回请求首先到达的文件。
    【解决方案2】:

    我不认为你能做到这一点:__FILE__ 魔术常数表示它被写入哪个文件;仅此而已。

    如果您想知道最初调用了哪个 PHP 脚本(例如,请求了哪个 URL),查看 $_SERVER superglobal 可能会更幸运:它包含许多信息,包括一些对您有帮助的信息 (例如SCRIPT_FILENAMESCRIPT_NAME ;-)

    【讨论】:

      【解决方案3】:

      选择的答案仅适用于设置服务器变量的环境,尤其不适用于 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'];
      }
      

      【讨论】:

      • 这里应该是“array_shift”而不是“array_pop”
      • 不行,使用array_shift()会导致函数返回包含get_topmost_script()的脚本文件名,即__FILE__
      【解决方案4】:

      直接解决:

      父脚本:

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

      你懂的……

      【讨论】:

        【解决方案5】:

        你必须使用basename($_SERVER["SCRIPT_FILENAME"]),或者,如果你只喜欢脚本名称,你可以使用basename($_SERVER["SCRIPT_FILENAME"], '.php')

        【讨论】:

          【解决方案6】:

          执行此操作的另一种方法(在 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) 上的其他地方找到了解决此问题的方法,同时还在寻找其他内容,因此我已修改并添加到此问题中,因为这是我首先登陆的地方!

          【讨论】:

            猜你喜欢
            • 2014-03-06
            • 1970-01-01
            • 2020-06-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-14
            • 1970-01-01
            相关资源
            最近更新 更多