我已经搜索了高和低,得到了很多不同的解决方案和变量包含信息,以获得绝对路径。但它们似乎在某些条件下有效,而在其他条件下无效。有没有一种银弹方法来获得在PHP中执行的脚本的绝对路径?对我来说,脚本将从命令行运行,但是,如果在Apache等中运行,解决方案应该也能正常运行。
澄清:最初执行的脚本,不一定是编码解决方案的文件。
我已经搜索了高和低,得到了很多不同的解决方案和变量包含信息,以获得绝对路径。但它们似乎在某些条件下有效,而在其他条件下无效。有没有一种银弹方法来获得在PHP中执行的脚本的绝对路径?对我来说,脚本将从命令行运行,但是,如果在Apache等中运行,解决方案应该也能正常运行。
澄清:最初执行的脚本,不一定是编码解决方案的文件。
当前回答
__DIR__
摘自手册:
文件的目录。如果在包含中使用,则返回所包含文件的目录。这相当于dirname(__FILE__)。除非是根目录,否则该目录名没有后面的斜杠。
__FILE__总是包含一个符号链接解析的绝对路径,而在旧版本(高于4.0.2)中,在某些情况下它包含相对路径。
注意:__DIR__是在PHP 5.3.0中添加的。
其他回答
echo realpath(dirname(__FILE__));
如果将此文件放在包含的文件中,它将打印该包含的路径。要获得父脚本的路径,将__FILE__替换为$_SERVER['PHP_SELF']。但是请注意PHP_SELF是一个安全风险!
__FILE__常量将给你当前文件的绝对路径。
更新:
问题被更改为询问如何检索最初执行的脚本,而不是当前运行的脚本。唯一(??)可靠的方法是使用debug_backtrace函数。
$stack = debug_backtrace();
$firstFrame = $stack[count($stack) - 1];
$initialFile = $firstFrame['file'];
realpath($_SERVER['SCRIPT_FILENAME'])
对于在web服务器$_SERVER['SCRIPT_FILENAME']下运行的脚本,将包含最初调用脚本的完整路径,因此可能是你的index.php。在本例中不需要Realpath()。
对于从控制台运行的脚本,$_SERVER['SCRIPT_FILENAME']将包含从当前工作目录到最初调用脚本的相对路径。因此,除非你在脚本中更改了工作目录,否则它将解析为绝对路径。
`realpath(dirname(__FILE__))`
它为您提供当前脚本(您放置此代码的脚本)目录,不带后面的斜杠。 如果您想在结果中包含其他文件,这一点很重要
请使用下面的方法:
echo __DIR__;