嵌套include_once问题

时间:2013-12-30 15:37:03

标签: php

这是我的目录树:

  • /
    • 的index.php
  • 包括/
    • 的functions.php
    • head.php
    • connect.php
  • 子/
    • 的index.php

在我的head.php和connect.php中都有:

include_once 'include/functions.php';

我在根文件夹中的index.php包含以下两个:head.php和connect.php,如下所示:

include_once 'include/connect.php';
include_once 'include/head.php;'

但是,当sub /中的index.php包含functions.php和head.php时,它们将无法包含functions.php。 这是我在sub / index.php中包含的内容:

include_once '../include/connect.php';
include_once '../include/head.php';

如果我将head.php和connect.php更改为: include_once'../ include / functions.php';

sub / index.php会正常包含所有内容,但root中的index.php将无法加载functions.php。

我该如何解决这个问题?

PHP版本:5.2。*

4 个答案:

答案 0 :(得分:5)

在include语句中使用常量__DIR__,然后相对于该语句移动。所以在sub / index.php中你会做include_once __DIR__ . '../include/connect.php'

__DIR__是一个常量,它是您所在文件的目录。

http://php.net/manual/en/language.constants.predefined.php

如果您使用的是php< v5.3,你可以使用dirname(__FILE__)来获得同样的东西。

答案 1 :(得分:1)


错误


head.phpconnect.php

中包含声明错误

include_once 'include/functions.php';


修复


include_once 'functions.php';

include_once __DIR__ . 'functions.php'; //PHP 5.3 or higher

include_once dirname(__FILE__) . 'functions.php'; //PHP 5.2 or lower


原因


head.phpconnect.phpfunctions.php位于同一文件夹中

正如@Schleis所建议的那样,使用__DIR__(PHP 5.3+)或dirname(__FILE__);(PHP 5.2-)将允许包含相对文件。

答案 2 :(得分:0)

我建议使用chdir()函数在每个文件中设置您的网站项目根目录,这样您就不需要考虑它当前位于何处以及有多少后台../你需要。

使用示例:

chdir($_SERVER['DOCUMENT_ROOT']);

答案 3 :(得分:0)

您可以在根文件中为包含路径定义常量,然后在所有其他文件中使用该常量:

define( "INCLUDE_PATH",  dirname(__FILE__) . '/include/' );

// some other file
include_once INCLUDE_PATH . 'functions.php';

优良作法是在根文件夹中有一个像config.php这样的文件,其中定义了全局设置,例如包含路径等。这样你就不必再关心相对路径,如果将来你决定更改文件夹结构,而不是更改所有文件中的路径只需更改包含常量。