2013-05-08 205 views
3

我已经包含在多个文件中,最近我开始了一个新目录,并且无法获取我的部分包含文件。PHP包含来自另一个目录的文件,其中也包含文件

例如我有这个包括我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

,最好的办法,以防止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'); 
+0

$ basedir将在a.php和bootstrap.php中包含相同的值,即使它在一个完全不同的文件中声明? – user2360599 2013-05-08 23:55:47

+0

这就好像我的意思......只是一个更好的方式。这应该松弛地解决它。 – alexander7567 2013-05-08 23:56:46

+0

是的,它就像在全局范围内声明的任何其他变量一样。你在脚本的入口点声明它(通常是index.php文件),并在脚本中使用它 – Tivie 2013-05-09 00:01:19

1

我这样做是通过在每一页的开头创建一个变量。该变量只是顶级目录的路径。例如,而不是

...

include 'includes/head.php'; 

使用:

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

,但你必须在每个页面的顶部创建这个变量和更改所有包括和要求声明。

+0

正确的选择文件,但大部分我的网页不想要发送的包括了目录。我想即时提问可能不可能 – user2360599 2013-05-08 23:29:58

1

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

文件被基于包含的给予或者,如果没有给出文件路径, 的include_path中指定。如果在 include_path中找不到该文件,则包含将最终检入调用脚本自己的 目录以及当前工作目录失败之前。

我建议您:

  • 包括使用绝对路径(不推荐,快速和肮脏的)
  • 更改的include_pathphp.ini),所以你不会有任何问题!
  • 设置自动装载系统http://php.net/manual/en/language.oop5.autoload.php(但它更上课,可能无法帮助你,但要知道它的存在是很重要的)
  • 要使用_ DIR _恒(见Tivie回复)如果你有一个独特的PHP文件“入口”(下称“引导文件”),这被称为所有的时间(这应该是这种情况)

此外,当你说:

例如,我有这包括在我的postpage.php这是位于 example.com/c/postpage.php:

一定要充分了解一个事实,即“路径”的网址(例如。 com/foo)和磁盘上的路径文件可能完全不同,并且完全不连接。

因此,在你的情况下,因为你似乎有一个目录布局的东西(header/footer/...),也许另外一个模板,最简单的事情可能是在你的php中添加这2个路径。 INI。

然后,只需拨打:include('head.php')即可。

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

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

,如果你是从其他文件夹,然后编码会是这样

include "foldername/filename.php"; 
相关问题