如何获取执行文件的完整路径? [复制]
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_URI
、SCRIPT_NAME
和 PHP_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']
。以上是关于如何获取执行文件的完整路径? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Directory.GetFiles:如何只获取文件名,而不是完整路径? [复制]
如何在 bash 中获取通过 $PATH 执行的脚本的绝对路径? [复制]