嵌套的php包括使用'./'

时间:2009-07-09 02:01:00

标签: php

我有几个PHP文件包含()来自其他几个目录的其他文件。

在其中一个包含的文件中:foo/bar.php,我希望bar.php包含目录foo中包含的3个其他文件。但是bar.php实际上包含在另一个目录中的另一个文件中,该文件包含在另一个目录中,依此类推。

如果我这样做了:

include('./apple.php');
include('./orange.php');

foo/bar.php中,它是否包含foo目录中的正确文件,无论哪个文件包含bar.php本身?

6 个答案:

答案 0 :(得分:6)

请改用以下内容:

include(dirname(__FILE__).'/apple.php');

我不知道你发布的内容是否可靠,但是会这样。

答案 1 :(得分:2)

没有。在包含文件名开头使用./强制从Web服务器设置的“当前目录”中搜索它(很可能是初始脚本的目录,或者DocumentRoot,具体取决于Web服务器)

获得所需行为的方式取决于include_path的值(如果需要,可以使用set_include_path()进行修改)。

来自include()的文档:

  

首先在相对于当前工作目录的每个include_path entry中查找包含文件,然后在当前脚本的目录中查找。例如。如果您的include_path libraries ,则当前工作目录为 /www/ ,您包含 include/a.php 并且该文件中包含“ b.php ”,首先在 /www/libraries/ 中查看b.php,然后在 {中查找{1}} 即可。如果filename以/www/include/./开头,则仅在当前工作目录或当前工作目录的父目录中查找。

因此,如果首先在../的其他目录中找不到文件名,则可以使用include_path

如果apple.php可能存在于其他地方,并且您希望首先使用此文件夹中的副本,则可以使用Matthew的建议,

include('apple.php')

或者,如果您要从当前目录中包含许多文件:

include(dirname(__FILE__).'/apple.php');

答案 2 :(得分:1)

顺便说一句,在包含库时,您通常应使用include_once()require_once()来避免意外循环或双重包含的问题。

答案 3 :(得分:0)

上次遇到这种问题时,我在public_http根文件夹中创建了一个include目录,并将其路径添加到include_path ini配置中。包含文件没有更多麻烦。您甚至可以在该自定义include_folder中添加文件夹以供组织。

说,你有header.php,footer.php,calendar.php和menu.php作为“模板”包括,而一些函数/类包括如encription.php,authentication.php,permissions.php。您可以将它们全部存储在包含文件夹中,例如:

  • 定制包括文件夹
    • 模板
      • 的header.php
      • footer.php
      • calendar.php
      • menu.php
      • encription.php
      • authentication.php
      • permissions.php

您直接使用

include 'template/header.php

答案 4 :(得分:0)

include()require()将与您当前的工作目录getcwd()相关,该目录通常与所请求脚本的目录相同(至少在apache下)。但是,如果在CLI模式下,它是从$ PWD继承的内容;

因此,

include(dirname(__file__) . '/include.php');  

是一种很好的方法。

答案 5 :(得分:0)

最佳做法是使用绝对路径。您可以在引导程序文件的变量中定义路径的公共部分 为什么我认为这是最佳做法:

  1. 它否定了你这样的问题 有。
  2. 它更具可读性(当你有一个包含数百个文件的应用程序时,它会让它更容易找到它们。)
  3. 在缓存和require / include_once功能方面,这是最快的方式