PHP包含包含目录树中文件的文件

时间:2017-10-06 16:40:04

标签: php

我有这个目录树:

test.php
foodir
`---- foo.php
bardir
`---- bar.php

当我打开test.php时,我包含了foo.php。然后,我希望foo.php包含bar.php。

test.php的:

include 'foodir/foo.php';

foo.php:

include '../bardir/bar.php';

然而,当我打开test.php时,我得到:

  

警告:include(../ bardir / bar.php):无法打开流:没有这样的文件或目录

我注意到如果我将目录树更改为:

test.php
foodir
`---- foo.php
 ---- bardir
      `---- bar.php

然后将foo.php更改为:

include 'bardir/bar.php';

一切正常。看来我可以包含相对于当前包含的文件的文件 但是,为什么我无法前往该文件的目录树?

修改

我知道我可以将include 'bardir/bar.php'放在 foo.php 中。它会在test.php的位置搜索bar.php。但是,如果我从test.php所在目录以外的目录中包含foo.php,那么这并不能解决我的问题。这是因为在其他目录中,bardir/bar.php不会存在。

3 个答案:

答案 0 :(得分:0)

当您使用include 'foodir/foo.php';时,该文件现在基本上在test.php的“范围”中运行。

因此,该文件中包含include '../bardir/bar.php';

将上一个文件夹,然后搜索bardir,这不是: (它正在寻找这种安排:)

parent/test.php
parent/foodir
      `---- foo.php
bardir
   `---- bar.php

因此,在foo.php内使用的正确包含将为include 'bardir/bar.php';

简而言之:如果您打开test.php,则所有包含文件中使用的所有包含路径都应该相对于test.php的位置 - 而不是它们的实际位置。

ps。:如评论中所述:包含首先检查已定义的include-dir,只有在没有匹配时,路径才被视为“相对”。

答案 1 :(得分:0)

简单地说:

include dirname(__DIR__).'/bardir/bar.php';

__DIR__是使用/调用此常量的文件的绝对目录路径(无论它包含在哪里),因此__DIR__等于/full/absolute/path/foodir。并且dirname(__DIR__)位于路径的一个目录中,因此dirname(__DIR__) /full/absolute/pathbar.php所在的位置为/full/absolute/path/bardir。这就是我们想要的,这就是我们得到的。

这种方式你不必担心包括路径相关性。无论在何处foodir/foo.php都包含在

中,它都适用于任何情况

答案 2 :(得分:0)

  

"当您使用$("body").on("mouseenter", ".pin", function() { $(".map-box").css("opacity", 1); }) .on("click", ".map-box button", function() { $(".map-box").css("opacity", 0); }); 时,它会假定要查找的基本目录   file是当前文件的目录"

因此,当您必须包含来自另一个目录的文件时,您必须指定父目录的相对路径,如此处include包含所以请说明

"Base"

我们将使用

Base -> A
       ->file1.php
      ->B
       ->file1.php

用于从A添加文件,反之亦然。

假设include "../A/file1.php"; 为指定目录的一级

你也可以像../一样使用常量来获取当前文件的目录名称