PHP包括另一个目录中也包含文件的文件

时间:2013-05-08 23:06:08

标签: php include directory

我已经包含多个文件,我最近开始了一个新目录,但无法让我的一些包含工作。

例如我在postpage.php中包含了这个内容,位于example.com/c/postpage.php:

include '../includes/overall/header.php';

当它进入根目录并且包含header.php时起作用 但我的问题是header.php还包括未包含的文件。

header.php中的代码是:

include 'includes/head.php';

无效

如果我将header.php更改为:

include '../includes/head.php';

然后它打破了我网站的其余部分,同时只为postpage.php

工作

欢迎任何建议。

4 个答案:

答案 0 :(得分:6)

防止可能破坏相对路径的CWD更改的最佳方法是使用绝对路径包含文件。

实现此目的的一种简单方法是使用__DIR__常量。

示例:

文件结构:

serverRoot (/)
    |-usr
        |-local
            |-www
                |-index.php
                |-bootstrap.php
                |-includes
                    |-a.php
                    |-overall
                        |-b.php
                        |-c.php

让我们说:

  • index.php 包括 bootstrap.php a.php
  • a.php 包括 b.php
  • bootstrap.php 包含 c.php

的index.php

$basedir = realpath(__DIR__);
include($basedir . '/bootstrap.php');
include($basedir . '/includes/a.php');

a.php只会

global $basedir;
include($basedir . '/includes/overall/b.php');

bootstrap.php中

global $basedir;
include($basedir . '/includes/overall/c.php');

答案 1 :(得分:1)

我是通过在每个页面的开头创建一个变量来实现的。该变量只是顶级目录的路径。

...示例

而不是

 include 'includes/head.php';

使用:

 $pathToRoot = '../';
 include $pathToRoot.'includes/head.php';

但您必须在每个页面的顶部创建此变量并更改所有include和require语句。

答案 2 :(得分:1)

您可以查看这部分PHP文档: http://www.php.net/manual/en/function.include.php

  

根据给定的文件路径包含文件,如果没有给出,则为   指定 include_path 。如果在。中找不到该文件   include_path,include将最终签入调用脚本自己的   目录和失败前的当前工作目录。

我建议你:

  • 包含绝对路径(不推荐,快速和肮脏)
  • 更改您的 include_path php.ini),这样您就不会有任何问题!
  • 设置自动加载系统http://php.net/manual/en/language.oop5.autoload.php(但对于课程更多,可能对您没有帮助,但知道它存在很重要)
  • 使用 _ DIR _常量(请参阅Tivie回复),如果您有一个独特的PHP文件“入口”(“引导程序文件”),它被称为全部时间(应该是这样的!)

另外,当你说:

  

例如我在我的postpage.php中有这个包含位于   example.com/c/postpage.php:

请务必完全理解“路径”URL(example.com/foo)和磁盘上的路径文件可能完全不同,并完全取消链接。

所以,在你的情况下,因为你似乎有一个目录用于布局东西(页眉/页脚/ ...),也许还有一个用于模板的目录,最简单的方法是在你的php.ini中添加这两个路径

然后只需致电:include('head.php')即可。

您也可以在include_path中添加项目的基本目录,然后调用include('includes/overall/head.php')

答案 3 :(得分:0)

include "include/header.php";
include "include/head.php";

如果你是从另一个文件夹中选择文件,那么编码将是这样的

include "foldername/filename.php";