我有以下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)的名称可能会更改,因此我不想为这些路径使用静态字符串!
答案 0 :(得分:2)
你没有走错路。
include
使被调用文件成为调用它的脚本的一部分,但它不会改变PHP指向的路径。因此,如果您从fileA
致电dirB
,则PHP仍在dirB
。
但是你知道dirA(否则你不能包含fileA),所以chdir("../dirA/dirA.1/dirA.1.1/")
会将PHP指向dirA,即使是从fileB或文件C。
您可以考虑在dir0
工作。使用dirB/fileB.php
调用fileB,并将fileA包含在include "dirA/dirA.1/dirA.1.1/fileA.php"
中。在这种情况下,你总是知道你在树中的位置:在dir0。
修改强>
我错了。如果从包含的fileA中调用dirname(__FILE__);
,则返回fileA的路径。所以你要在fileA顶部做的就是:
$mypath=dirname(__FILE__);
function myfunction($path){
echo $path;
}
在fileB中,在传递$ mypath时调用你的函数:
myfunction($mypath);
请注意,您可能需要对斜杠和反斜杠进行一些调整,具体取决于您的服务器正在运行的系统。