这是我的目录树:
在我的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。*
答案 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.php
和connect.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.php
和connect.php
与functions.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
这样的文件,其中定义了全局设置,例如包含路径等。这样你就不必再关心相对路径,如果将来你决定更改文件夹结构,而不是更改所有文件中的路径只需更改包含常量。