include() 和 require_once() 问题

Posted

技术标签:

【中文标题】include() 和 require_once() 问题【英文标题】:include() and require_once() Issue 【发布时间】:2017-12-10 08:42:37 【问题描述】:

我有这种情况:

/

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__;查看该目录的正确路径,没有出路。

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

【问题讨论】:

../ 将此添加到您的 includerequire_once() 文件路径中,例如:- ../init/init.php 是的,我已经尝试过这种方式,它只是警告同样的事情只是在路径之前添加 ../... :'( 你看过***.com/questions/1180459/…吗? 重要的是要记住,如果您包含/需要一个包含/需要其他文件的文件,所有相对路径都将是相对于执行包含的文件,而不是文件本身。最好的办法是:require __DIR__ . '/relative/from/this/file.phpDIR 为您提供写入文件的绝对路径。 您所拥有的问题是,在 layout_parts 中您需要 ../ 在 my_space 中您将需要 ../../ 等等。 【参考方案1】:

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

所以创建这样的东西:

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

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

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

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

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

【讨论】:

是的,你写的是我正在寻找的东西,但我真的无法摆脱这种情况..假设我创建了一个名为 path.php 的文件,我在其中定义了 $appRoot 甚至一系列成本将我带到我想要的文件夹..在我的索引中总是可以正常工作,但是当我进入一个子文件夹页面时,它会给我这个警告,但它肯定我在整个设计中错过了一些东西,我会吃看看意大利面的碳水化合物是否有帮助.. TY

以上是关于include() 和 require_once() 问题的主要内容,如果未能解决你的问题,请参考以下文章

include() 和 require_once() 问题

require_once 和 include_once 无法正确解析文件

require(),include(),require_once()和include_once()区别

php的include(),require(),include_once(),require_once()

require(),include(),require_once()和include_once()之间的区别

包括、include_once、require 还是 require_once?