我正在尝试在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请求的正确路径?
答案 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.php和http://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