PHP获取包含文件的文件目录

时间:2014-04-16 09:55:07

标签: php include-path dirname

我有以下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)的名称可能会更改,因此我不想为这些路径使用静态字符串!

1 个答案:

答案 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);

请注意,您可能需要对斜杠和反斜杠进行一些调整,具体取决于您的服务器正在运行的系统。