我已经搜索了高和低,得到了很多不同的解决方案和变量包含信息,以获得绝对路径。但它们似乎在某些条件下有效,而在其他条件下无效。有没有一种银弹方法来获得在PHP中执行的脚本的绝对路径?对我来说,脚本将从命令行运行,但是,如果在Apache等中运行,解决方案应该也能正常运行。
澄清:最初执行的脚本,不一定是编码解决方案的文件。
我已经搜索了高和低,得到了很多不同的解决方案和变量包含信息,以获得绝对路径。但它们似乎在某些条件下有效,而在其他条件下无效。有没有一种银弹方法来获得在PHP中执行的脚本的绝对路径?对我来说,脚本将从命令行运行,但是,如果在Apache等中运行,解决方案应该也能正常运行。
澄清:最初执行的脚本,不一定是编码解决方案的文件。
当前回答
`realpath(dirname(__FILE__))`
它为您提供当前脚本(您放置此代码的脚本)目录,不带后面的斜杠。 如果您想在结果中包含其他文件,这一点很重要
其他回答
如果你想获取当前工作目录,请使用getcwd()
http://php.net/manual/en/function.getcwd.php
__FILE__将返回路径和文件名,例如在XAMPP上C:\ XAMPP \htdocs\index.php而不是C:\ XAMPP \htdocs\
如果你正在寻找相对于服务器根目录的绝对路径,我发现这很有效:
$_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['SCRIPT_NAME'])
__FILE__常量将给你当前文件的绝对路径。
更新:
问题被更改为询问如何检索最初执行的脚本,而不是当前运行的脚本。唯一(??)可靠的方法是使用debug_backtrace函数。
$stack = debug_backtrace();
$firstFrame = $stack[count($stack) - 1];
$initialFile = $firstFrame['file'];
在你的脚本上试试这个
echo getcwd() . "\n";
这是我为此写的一个有用的PHP函数。正如最初的问题所阐明的那样,它返回执行初始脚本的路径——而不是我们当前所在的文件。
/**
* Get the file path/dir from which a script/function was initially executed
*
* @param bool $include_filename include/exclude filename in the return string
* @return string
*/
function get_function_origin_path($include_filename = true) {
$bt = debug_backtrace();
array_shift($bt);
if ( array_key_exists(0, $bt) && array_key_exists('file', $bt[0]) ) {
$file_path = $bt[0]['file'];
if ( $include_filename === false ) {
$file_path = str_replace(basename($file_path), '', $file_path);
}
} else {
$file_path = null;
}
return $file_path;
}