我可以使用这三个文件:
document_root/include/config.php
document_root/include/database.php
document_root/index.php
文件内容的相关部分如下:
的config.php
// ...
$MyVar = 100;
// ...
database.php中
// ...
require('config.php');
// Aiming to use the definitions in "config.php" here
// ...
的index.php
// ...
require('include/database.php');
// Using the code in "database.php" here
// ...
问题是,config.php
以某种方式不包括在内,但没有给出错误消息(在E_ALL模式下)。在config.php
中运行代码时,我无法访问database.php
文件中index.php
文件中的定义。
在我的PHP.ini
文件include_path
中设置为C:\...\document_root\include
目录
PHP版本是5.3.0。
我观察到,如果我将require()
指令更改为database.php
require('include/config.php');
代码运行没有任何失败,一切都很好。但是这种解决方案在实践中是不可能的,因为我计划在多个位置包含config.php
文件。
这个问题的原因是什么?
我该如何解决?
任何帮助将不胜感激。
答案 0 :(得分:3)
此问题的原因是,include
根据工作目录解析相对文件名,而不是基于文件所在的目录include
工作目录是网络服务器启动的PHP文件的目录(在你的情况下是index.php
我猜)。如果该文件包含其他文件,则不会更改工作目录。它可以使用chdir
手动更改,但您不应仅仅为了include
而这样做。
一种可能的解决方案是使用
include dirname(__FILE__) . DIRECTORY_SEPARATOR . '[RELATIVE_PATH]';
其中[RELATIVE_PATH]
是从包含文件的文件到包含的文件的相对路径。
在PHP 5.3中,可以使用__DIR__
代替dirname(__FILE__)
。