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()将最终检入调用脚本自己的目录…”,这意味着您一开始就不应该遇到问题。我确信上次检查时引用的部分不在那里。