我已经搜索了高和低,得到了很多不同的解决方案和变量包含信息,以获得绝对路径。但它们似乎在某些条件下有效,而在其他条件下无效。有没有一种银弹方法来获得在PHP中执行的脚本的绝对路径?对我来说,脚本将从命令行运行,但是,如果在Apache等中运行,解决方案应该也能正常运行。

澄清:最初执行的脚本,不一定是编码解决方案的文件。


当前回答

__FILE__常量将给你当前文件的绝对路径。

更新:

问题被更改为询问如何检索最初执行的脚本,而不是当前运行的脚本。唯一(??)可靠的方法是使用debug_backtrace函数。

$stack = debug_backtrace();
$firstFrame = $stack[count($stack) - 1];
$initialFile = $firstFrame['file'];

其他回答

正确的解决方案是使用get_included_files函数:

list($scriptPath) = get_included_files();

这将给你初始脚本的绝对路径,即使:

这个函数被放置在一个包含的文件中 当前工作目录与初始脚本目录不同 脚本以相对路径的形式在CLI下执行


这里有两个测试脚本;主脚本和包含的文件:

# C:\Users\Redacted\Desktop\main.php
include __DIR__ . DIRECTORY_SEPARATOR . 'include.php';
echoScriptPath();

# C:\Users\Redacted\Desktop\include.php
function echoScriptPath() {
    list($scriptPath) = get_included_files();
    echo 'The script being executed is ' . $scriptPath;
}

结果是;注意当前目录:

C:\>php C:\Users\Redacted\Desktop\main.php
The script being executed is C:\Users\Redacted\Desktop\main.php
__DIR__

摘自手册:

文件的目录。如果在包含中使用,则返回所包含文件的目录。这相当于dirname(__FILE__)。除非是根目录,否则该目录名没有后面的斜杠。

__FILE__总是包含一个符号链接解析的绝对路径,而在旧版本(高于4.0.2)中,在某些情况下它包含相对路径。

注意:__DIR__是在PHP 5.3.0中添加的。

如果你想获取当前工作目录,请使用getcwd()

http://php.net/manual/en/function.getcwd.php

__FILE__将返回路径和文件名,例如在XAMPP上C:\ XAMPP \htdocs\index.php而不是C:\ XAMPP \htdocs\

在你的脚本上试试这个

echo getcwd() . "\n";
echo realpath(dirname(__FILE__));

如果将此文件放在包含的文件中,它将打印该包含的路径。要获得父脚本的路径,将__FILE__替换为$_SERVER['PHP_SELF']。但是请注意PHP_SELF是一个安全风险!