嵌套包含PHP

时间:2012-07-12 18:30:20

标签: php include nested require

我遇到嵌套包含问题。虽然我看到有一些类似的问题,但它们似乎没有帮助。

一般来说,我没有包含问题,但最近我一直在尝试新的东西,我无法让嵌套的包含工作。

一个解决方案:php nested include behavior

基本设置:

  • index.php包含'/include/header.php'
  • header.php包含'/resources/login/index_alt.php'
  • index_alt.php包含'/resources/login/index_auth.php'
  • index_auth.php包含'/class/Login.class.php'和 '/class/Connection.class/php'

我实际上并没有写这样的路径(它是为了理解深度)。 这就是它在页面上的外观。

的index.php

  • 包括( '包括/ header.php文件');

header.php :(标题包含在每个深度级别,除了/ resources /...)

  • 包括( '../资源/登录/ index_alt.php');

index_alt.php

  • 包括( 'index_auth.php');

index_auth.php

  • 包括( '../../类/ Login.class.php');
  • 包括( '../../类/ Connection.class.php');

在某些深度级别,头文件被接受,但包含嵌套的不会......

2 个答案:

答案 0 :(得分:4)

假设文件系统看起来像这样..

/www
   include/header.php
   class/Login.class.php
   class/Connection.class.php
   resources/login/index_alt.php
   resources/login/index_auth.php
   index.php

这意味着

index.php: include(__DIR__ . '/include/header.php');
header.php: include(__DIR__ . '/../resources/login/index_alt.php');
index_alt.php:  include(__DIR__ . '/index_auth.php');

等;见http://php.net/manual/en/language.constants.predefined.php

答案 1 :(得分:2)

而不是使用../ use dirname(__FILE__)遍历目录树。此外,您可能需要include_once()或require_once()来避免其他潜在问题:

的index.php:

include('include/header.php');

的header.php:

include(dirname(dirname(__FILE__)) . '/resources/login/index_alt.php');

(请注意,dirname(__FILE__)将返回当前目录,但dirname(dirname(__FILE__))将返回父目录