2

我包含在多个文件中,我最近启动了一个新目录,但无法让我的一些包含工作。

例如,我在位于 example.com/c/postpage.php 的 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

4 回答 4

7

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

一个简单的方法是使用__DIR__常量。

例子:

文件结构:

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

让我们这么说:

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

索引.php

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

一个.php

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

引导程序.php

global $basedir;
include($basedir . '/includes/overall/c.php');
于 2013-05-08T23:32:31.640 回答
1

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

例子...

代替

 include 'includes/head.php';

采用:

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

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

于 2013-05-08T23:16:50.480 回答
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(但它更多用于类,可能对您没有帮助,但知道它的存在很重要)
  • 如果您有一个始终被调用的唯一 PHP 文件“入口”(“引导文件”)(应该是这种情况!),则使用_ DIR _ 常量(请参阅 Tivie 回复)

另外,当你说:

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

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

因此,在您的情况下,由于您似乎有一个目录用于布局内容(页眉/页脚/...),而另一个目录可能用于模板,最简单的方法可能是在您的 php.ini 中添加这两个路径。

然后只需调用 : 即可include('head.php')

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

于 2013-05-08T23:26:16.980 回答
0
include "include/header.php";
include "include/head.php";

如果您从其他文件夹中选择文件,那么编码将是这样的

include "foldername/filename.php";
于 2016-11-30T19:15:12.730 回答