1

我试图在 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 请求返回正确的路径?

4

3 回答 3

2

这应该有效:

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

get_included_files()从文档中引用:

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

测试

<!-- 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"
}
于 2012-10-31T08:03:01.590 回答
1

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

__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.phphttp://nl1.php.net/manual/en/function.dirname.php

编辑:要检索当前正在执行的脚本,您可以获得

$_SERVER['SCRIPT_FILENAME']

这将返回执行文件的文件名。有关详细信息,请参阅http://php.net/manual/en/reserved.variables.server.php

于 2012-10-31T07:56:41.077 回答
0

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

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

于 2012-10-31T07:55:51.730 回答