与接受的答案相比,我对这个问题可能有一个更简单的解释,所以我要试一试:假设这是项目的文件和目录的结构:
Project root directory:
file1.php
file3.php
dir1/
file2.php
(dir1
是一个目录,位于其中)file2.php
这是上面三个文件的内容:
//file1.php:
<?php include "dir1/file2.php"
//file2.php:
<?php include "../file3.php"
//file3.php:
<?php echo "Hello, Test!";
现在运行并尝试猜测应该发生什么。您可能会看到“您好,测试!”,但是,它不会显示!相反,您将获得的将是一个错误,指示您请求的文件()不存在!file1.php
file3.php
原因是,在包含 内部时,它的内容被复制,然后直接粘贴回根目录内的内容,因此此部分从根目录运行,因此在根目录中向上移动一个目录!file1.php
file2.php
file1.php
"../file3.php"
file3.php
现在,我们该怎么办?!
相对路径当然有上述问题,所以我们必须使用绝对路径。但是,绝对路径也有一个问题。如果您(例如)复制根文件夹(包含整个项目)并将其粘贴到计算机上的其他任何位置,则从那时起,路径将无效!那将是一个真正的混乱!
因此,我们需要既绝对又动态的路径(每个文件动态地找到自身的绝对路径,无论我们将其放置在何处)!
我们这样做的方法是从PHP获得帮助,并且是要去的函数,它给出了文件所在的目录的绝对路径。每个文件名也可以使用常量轻松访问。因此,可以很容易地为您提供我们在上述代码中键入的文件的绝对(同时动态!)路径。现在,将您的整个项目移动到一个新地方,甚至是一个新系统,tada!它的工作原理!dirname()
__FILE__
dirname(__FILE__)
所以现在如果我们把上面的项目变成这个:
//file1.php:
<?php include(dirname(__FILE__)."/dir1/file2.php");
//file2.php:
<?php include(dirname(__FILE__)."/../file3.php");
//file3.php:
<?php echo "Hello, Test!";
如果你运行它,你会看到全能的!(希望,如果你没有做错任何其他事情)。Hello, Test!
还值得一提的是,从PHP5开始,PHP还提供了一种更好的方法(关于可读性和防止眼睛沸腾!),这是一个常量,它的作用与!__DIR__
dirname(__FILE__)
希望有所帮助。