[英]Included file from a parent folder that includes a file from another folder
標題很難理解,但我的問題很簡單:
我有:
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.php
和language/english.php
但ajax/ajax_vote.php
僅包含config_mysql.php
?
對於基本文件夾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");
和朋友。
原因是language/english.php
與config.php
不在同一目錄中。 另外,/ /ajax/ajax_vote.php
在根文件夾之外。
但是,PHP仍設法正確地包含文件。 我不明白為什么/ajax/ajax_vote.php
不包含文件language/english.php
。 如果我誤解了這個問題,請糾正我。
Eugen所說的是正確的,這是因為基本路徑與所包含的腳本不同。
同樣從我的測試(因為我遇到了類似的問題)看來,php include()在包含文件時將存儲另一個臨時的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()一起使用可能會更安全。
/ EDIT:我剛剛發現include('/ path / to / file')在Windows操作系統上可能是一個錯誤:在Windows上它等於dirname(__ FILE__),但是在UNIX上它等於根路徑。 因此dirname(__ FILE__)絕對更可靠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.