include()和require_once()问题

时间:2017-07-06 11:08:57

标签: php path include subdirectory require-once

我遇到这种情况:

/

index.php

/init (folder)

      init.php (of course inside this file i use require_once for db/function/and whatever you want to put inside)

/layout_parts (folder)

     header.php (and others common parts are inside this folder)

/my_space (folder inside layout parts)

      my_file.php

      another_file.php

/your_space (folder inside layout parts)

      your_file.php

      another_file.php

/third_space (folder inside layout parts)

      third_file.php

      another_file.php

对于索引我没有问题一切正常,但是如果我在其中一个子文件夹文件中include header.php,那么我在header.php顶部的require_once(init/init.php);将无法正常工作

(警告消息说目录中没有这样的文件(OF COURSE THE FILE EXIST),它记下了不是我期望的路径的子文件夹目录。)

我尝试echo $SERVER['DOCUMENT_ROOT];查看整个路径echo __DIR__;,看看该路径是否正确,无法解决。

我知道这是一个虚假的问题,但如果有些善良的心可以帮助我,那就太棒了。谢谢:))

1 个答案:

答案 0 :(得分:0)

处理此问题的最佳方法是使用绝对路径而不是相对路径。当你使用相对路径时,你每次都要担心你有多少级别,然后有那么多../等等。这很麻烦且难以管理,例如,如果你将文件移动到另一个位置,您必须根据您现在的位置再次更新包含。这就是绝对路径有用的原因。

所以创建这样的东西:

$appRoot = "/path/to/root/folder/";

这是index.php文件所在的路径。它是"应用程序根",如果你愿意的话。

现在,在任何要包含init.php的文件中添加以下行:

include_once($appRoot."init/init.php");

理想情况下,应在位于根目录中的$appRoot中创建global config。如果你没有可以添加univeral配置的结构,它仍然可能很乱,你可能需要将绝对路径添加到单个文件中(这不是一个好主意)