2012-06-10 216 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__)肯定更可靠。

相關問題