如何获取执行文件的完整路径? [复制]

Posted

技术标签:

【中文标题】如何获取执行文件的完整路径? [复制]【英文标题】:How to get full path to executed file? [duplicate] 【发布时间】:2012-10-20 15:26:59 【问题描述】:

我正在尝试在 php 中获取当前执行文件的完整路径。

realpath() 返回路径没有脚本文件名。pathinfo() 不传递整个路径就不能使用它来分解。__FILE__ 获取路径调用文件(即,调用__FILE__ 常量的位置),可能位于included file 内;这是我不想要的。

$_SERVER 变量 REQUEST_URISCRIPT_NAMEPHP_SELF 不返回完整路径。

除了警告之外,最有希望的是$_SERVER 变量SCRIPT_FILENAME..

如果使用 CLI 执行脚本,作为相对路径,例如 file.php 或 ../file.php,$_SERVER['SCRIPT_FILENAME'] 将包含用户指定的相对路径。

我想要 $_SERVER['SCRIPT_FILENAME'] 返回的确切内容,例如 /home/site/public_html/index.php,但不能 100% 确定在所有情况下使用它是否安全?

后者是最好的使用方法吗?除了 CLI 之外,它是否总是为正常的 Web 请求返回正确的路径?

【问题讨论】:

也许这就是你想要的dirname(__FILE__)."/curruntFile.php" 【参考方案1】:

这应该可行:

$a = get_included_files();
echo $a[0];

引用get_included_files() 文档:

最初调用的脚本被认为是“包含文件”,因此它 将与 include 和引用的文件一起列出 家庭。

测试

<!-- main.php -->
<?php include "middle.php"; ?>

<!-- middle.php -->
<?php include "inner.php"; ?>

<!-- inner.php -->
<?php var_dump(__FILE__, $_SERVER["PHP_SELF"], get_included_files()); ?>

输出

string(21) "C:\inetpub\wwwroot\inner.php"
string(9) "/main.php"
array(3) 
  [0]=>
  string(20) "C:\inetpub\wwwroot\main.php" <-- this is what you are looking for
  [1]=>
  string(22) "C:\inetpub\wwwroot\middle.php"
  [2]=>
  string(21) "C:\inetpub\wwwroot\inner.php"

【讨论】:

不错!这似乎做到了! :) 这和$_SERVER['SCRIPT_FILENAME'] 之间的一个有趣区别是这将在 Windows 系统上返回带有反斜杠的 100% 真实路径,而 $_SERVER['SCRIPT_FILENAME'] 将返回带有正斜杠的路径。 :)【参考方案2】:

如果您想要当前文件,可以使用全局实例检索它

__FILE__

请参阅http://php.net/manual/en/language.constants.predefined.php 了解更多信息 如果你想检索文件所在的目录

// PHP < 5.3 
dirname(__FILE__);

// PHP > 5.3 
__DIR__

见http://php.net/manual/en/language.constants.predefined.php和http://nl1.php.net/manual/en/function.dirname.php

编辑: 要检索当前的执行脚本,可以得到

$_SERVER['SCRIPT_FILENAME']

这将返回执行文件的文件名。请参阅http://php.net/manual/en/reserved.variables.server.php 了解更多信息。

【讨论】:

请重新阅读我的问题。我已经解释过我不能使用__FILE__【参考方案3】:

您可以使用dirname(__FILE__);,或者如果您使用的是 php > 5.3,则只需 __DIR__;

手册:http://php.net/manual/en/language.constants.predefined.php

【讨论】:

这给了我放置该代码的文件的路径,而不是执行文件的路径,例如$_SERVER['SCRIPT_FILENAME']

以上是关于如何获取执行文件的完整路径? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

获取 AIX 上正在运行的进程的可执行文件的完整路径

MVC:如何从文件输入字段中获取完整的文件路径? [复制]

Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]

如何在 bash 中获取通过 $PATH 执行的脚本的绝对路径? [复制]

如何从shell脚本中的另一个目录获取文件的完整路径? [复制]

C++ Windows - 通过可执行文件路径获取进程的 PID