我有以下 PHP 文件结构:
dir0
dirA
dirA.1
dirA.1.1
fileA.php : dirname(__FILE__).'/docs';
dirA.2
...
dirB
fileB.php: include_once("../dirA/dirA.1/dirA.1.1/fileA.php");
dirC
fileC.php: include_once("../dirA/dirA.1/dirA.1.1/fileA.php");
在包含的 fileA.php 中,我使用 dirname(__FILE__)
。
如果我直接调用 fileA.php 的函数,我会得到当前路径。但是,如果我在 fileB.php 和 fileC.php 中调用它(包含后),我会得到错误的路径,...等等!
如何获取包含文件的目录?
注意: dir0(root) 的名称可能会改变,所以我不想为这些路径使用静态字符串!
最佳答案
你不会误入歧途。
include
使被调用文件成为调用它的脚本的一部分,但它不会更改 PHP 指向的路径。因此,如果您从 dirB
调用 fileA
,PHP 仍在 dirB
中。
但是你知道 dirA(否则你不能包含 fileA),所以 chdir("../dirA/dirA.1/dirA.1.1/")
会将 PHP 指向 dirA,甚至来自文件 B 或文件 C。
您可以考虑从 dir0
开始工作。使用 dirB/fileB.php
调用 fileB 并使用 include "dirA/dirA.1/dirA.1.1/fileA.php"
包含 fileA。在那种情况下,您始终知道自己在树中的位置:在 dir0 中。
编辑
我错了。如果从包含的文件 A 中调用 dirname(__FILE__);
,它会返回文件 A 的路径。所以你在 fileA 的顶部要做的就是:
$mypath=dirname(__FILE__);
function myfunction($path){
echo $path;
}
然后在 fileB 中传递 $mypath 时调用你的函数:
myfunction($mypath);
请注意,您可能需要对斜杠和反斜杠进行一些调整,具体取决于您的服务器运行的系统。
关于PHP 获取包含文件的文件目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23105966/