2012-06-10 178 views
2

标题是很难理解的,但我的问题很简单:包含的文件,其中包括从另一个文件夹中的文件

我:

的config.php

include('config_mysql.php'); 
include('language/english.php'); 

那么我:的index.php

include('config.php'); 

然后:/ajax/ajax_vote.php

include('../config.php'); 

为什么index.php包括config_mysql.phplanguage/english.phpajax/ajax_vote.php只包括config_mysql.php

回答

0

include()基座夹是永诺原始脚本的基础文件夹,所以include()秒的include() d脚本内将非直观:

ajax/ajax_vote.php将(试图)包括

ajax/../config.php 
    -> ajax/sonfig_mysql.php 
    ajax/language/english.php 

你可能想看看

$BASEDIR=dirname(__FILE__); 
include("$BASEDIR/config_mysql.php"); 
include("$BASEDIR/language/english.php"); 

和朋友。

+0

不,在我的情况下,它实际上包括config_mysql.php(我答应!)的基础文件夹,唯一的问题是与english.php文件,该文件是语言文件夹 – Aleix

0

原因是,language/english.phpconfig.php不在同一个目录中。另外,/ajax/ajax_vote.php位于根文件夹之外的某处。

但仍然PHP管理正确包含文件。我不明白为什么/ajax/ajax_vote.php不包括文件language/english.php。如果我误解了这个问题,请纠正我。

+0

共里面,正确的,这是发生了什么。 'ajax_vote.php'不包含'language/english.php'文件,但包含'config_mysql.php' strage ...其他人请吗? – Aleix

0

Eugen说的是真实的,这是因为基本路径与您所包含的脚本不一样。

另外它似乎从我的测试(因为我遇到类似的问题),PHP包含()将包含文件时存储另一个临时include_path,这就是为什么ajax_vote.php可以包括config_mysql.php。为了说服自己,试着将config_mysql.php移动到你的ajax文件夹中:它会工作相同,并且config.php将能够包含它(但只有在执行ajax_vote.php时,不是index.php!)。在这种情况下,您有两个包含路径:'/ ajax /'和'/'。但是,当你使用一个路径(不仅仅是一个文件名来包含,而且还要在你的字符串中指定一个文件夹)时,包含路径只是基于正在执行的脚本(例如:'/ ajax /')。

您可以通过执行修复此问题:

include(dirname(__FILE__).'/language/english.php'); // don't forget the prepended '/' 

或者只是:

include('/language/english.php'); // here again the prepended '/' 

不过我警告你,我不完全理解为什么还没有第二个方法有效,您可能通过使用第一个与dirname()更安全。我只是发现包括('/ path/to/file')可能是Windows操作系统上的一个错误:在Windows上它等于dirname(__ FILE__),但在UNIX上它等于根路径。所以dirname(__ FILE__)肯定更可靠。

相关问题