包含来自另一个文件夹的文件的父文件夹中包含的文件

时间:2012-06-10 15:09:55

标签: php include directory

标题很难理解,但我的问题很简单:

我有:

的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.php,但ajax/ajax_vote.php仅包含config_mysql.php

3 个答案:

答案 0 :(得分:0)

include()的基本文件夹始终是原始脚本的基本文件夹,因此include() d脚本中的include()将不直观:

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");

和朋友们。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

从我的测试中看来(因为我遇到了类似的问题),php include()会在包含文件时存储另一个临时include_path,这就是为什么ajax_vote.php可以包含config_mysql.php。为了说服自己,尝试将config_mysql.php移动到你的ajax文件夹:它将工作相同,并且config.php将能够包含它(但仅在执行ajax_vote.php时,而不是index.php!)。在这种情况下,您有两个包含路径:'/ ajax /'和'/'。

但是,当您使用路径(不仅包含文件名,还要在字符串中指定文件夹)时,包含路径仅基于执行脚本(例如:仅'/ ajax /')。 / p>

您可以通过执行以下操作来解决此问题:

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

或者只是:

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

但是我警告你,我还没有完全理解为什么第二种方法有效,你可以使用dirname()使用第一种方法更安全。

/编辑:我刚刚发现include('/ path / to / file')可能是Windows操作系统上的一个错误:在Windows上它等于dirname(__ FILE__),但在UNIX上它等于根路径。所以dirname(__ FILE__)肯定更可靠。