Path 嵌套的'include()`指令-如何包含来自多个目录的文件(其中包括另一个文件)?

Path 嵌套的'include()`指令-如何包含来自多个目录的文件(其中包括另一个文件)?,path,include,php,include-path,Path,Include,Php,Include Path,我要处理以下三个文件: document\u root/include/config.php document\u root/include/database.php document\u root/index.php 文件内容的相关部分如下: config.php // ... $MyVar = 100; // ... // ... require('config.php'); // Aiming to use the definitions in "config.php" here //

我要处理以下三个文件:

document\u root/include/config.php

document\u root/include/database.php

document\u root/index.php

文件内容的相关部分如下:

config.php

// ...
$MyVar = 100;
// ...
// ...
require('config.php');
// Aiming to use the definitions in "config.php" here
// ...
// ...
require('include/database.php');
// Using the code in "database.php" here
// ...
database.php

// ...
$MyVar = 100;
// ...
// ...
require('config.php');
// Aiming to use the definitions in "config.php" here
// ...
// ...
require('include/database.php');
// Using the code in "database.php" here
// ...
index.php

// ...
$MyVar = 100;
// ...
// ...
require('config.php');
// Aiming to use the definitions in "config.php" here
// ...
// ...
require('include/database.php');
// Using the code in "database.php" here
// ...
问题是,
config.php
不知何故没有被包括在内,但没有给出错误消息(在E_ALL模式下)。在
index.php
中运行代码时,我无法从
database.php
文件访问
config.php
文件中的定义

在我的
PHP.ini
文件中
include\u路径
设置为
C:\…\document\u root\include
目录。
PHP版本是5.3.0

我观察到,如果我将
database.php
中的
require()
指令更改为
require('include/config.php')
代码运行时没有任何故障,一切正常。但是这个解决方案在实践中是不可能的,因为我计划包含来自多个位置的
config.php
文件

这个问题的原因是什么?
我怎样才能修好它


任何帮助都将不胜感激。

此问题的原因是,
include
基于工作目录解析相对文件名,而不是基于
包含的文件所在目录

工作目录是由Web服务器启动的PHP文件的目录(在您的例子中,我猜是
index.PHP
。如果该文件包含其他文件,则不会更改工作目录。可以使用手动更改,但不应仅为了包含而更改

一个可能的解决办法是使用

include dirname(__FILE__) . DIRECTORY_SEPARATOR . '[RELATIVE_PATH]';
其中
[RELATIVE_PATH]
是从包含的文件到包含的文件的相对路径


在PHP5.3中,可以使用
\uuuu DIR\uuuu
代替
dirname(\uuu FILE\uuuu)
这个问题的原因是
include
基于工作目录解析相对文件名,而不是基于
包含的文件所在目录

工作目录是由Web服务器启动的PHP文件的目录(在您的例子中,我猜是
index.PHP
。如果该文件包含其他文件,则不会更改工作目录。可以使用手动更改,但不应仅为了包含而更改

一个可能的解决办法是使用

include dirname(__FILE__) . DIRECTORY_SEPARATOR . '[RELATIVE_PATH]';
其中
[RELATIVE_PATH]
是从包含的文件到包含的文件的相对路径


在PHP5.3中,可以使用
\uuuuuu DIR\uuuuu
代替
dirname(\uuuuu文件)

您的答案很好,非常感谢。但是我想了解为什么在包含文件时必须指定路径,即使在
PHP.ini
指令
include\u path
中已经指定了它的路径?为什么一般的设置不适用于这里?实际上我自己也有点困惑。“include()将最终检入调用脚本自己的目录…”,这意味着您一开始就不应该遇到问题。我确信上次我检查时引用的部分不在那里。你的答案很好,很有效,非常感谢。但是我想了解为什么在包含文件时必须指定路径,即使在
PHP.ini
指令
include\u path
中已经指定了它的路径?为什么一般的设置不适用于这里?实际上我自己也有点困惑。“include()将最终检入调用脚本自己的目录…”,这意味着您一开始就不应该遇到问题。我确信上次检查时引用的部分不在那里。