include() 和 require_once() 问题

问题描述 投票:0回答:1

我有这样的情况:

/

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);
将无法工作。

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

我尝试

echo $SERVER['DOCUMENT_ROOT];
查看整个路径,
echo __DIR__;
查看哪个是目录的正确路径,没有出路。

我知道这是一个愚蠢的问题,但如果有一颗善良的心可以帮助我,那就太好了。谢谢

php path include subdirectory require-once
1个回答
0
投票

处理此问题的最佳方法是使用绝对路径而不是相对路径。当你使用相对路径时,你每次都必须担心你有多少层深度,然后有那么多

../
等。这很混乱并且难以管理,例如,如果你将文件移动到不同的位置,您必须根据您现在所在的位置再次更新包含内容。这就是为什么绝对路径很有用。

所以创建这样的东西:

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

这是index.php文件所在的路径。如果您愿意的话,它是“应用程序根目录”。

现在,在您想要包含

init.php
的任何文件中添加以下行:

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

理想情况下,

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

© www.soinside.com 2019 - 2024. All rights reserved.