include() 和 require_once() 问题

include() and require_once() Issue

我遇到这种情况:

/

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 在其中一个子文件夹文件中,我的 require_once(init/init.php); 位于 header.php 顶部没用。

(警告消息说目录中没有这样的文件(当然文件存在)并且它记下了不是我预期路径的子文件夹目录)。

我试过echo $SERVER['DOCUMENT_ROOT];查看完整路径,echo __DIR__;查看目录的正确路径,没有出路。

我知道这是一个愚蠢的问题,但如果有好心人能帮助我,那就太好了。谢谢:)

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

所以创建这样的东西:

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

这是index.php文件所在的路径。如果你愿意,它就是 "application root"。

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

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

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