如何获得执行文件的完整路径?

时间:2012-10-31 07:50:19

标签: php filepath

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

realpath()返回路径,不带脚本文件名 pathinfo()你不能在没有通过它的情况下使用整个分解的路径 __FILE__获取调用文件的路径(即; __FILE__常量被调用的地方),它可能位于included file内;这是我不想要的。

$_SERVER变量REQUEST_URISCRIPT_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请求的正确路径?

3 个答案:

答案 0 :(得分: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']

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

答案 1 :(得分: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"
}

答案 2 :(得分:0)

您可以使用dirname(__FILE__);或者如果您使用的是php&gt; 5.3只是__DIR__;

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