簡體   English   中英

父文件夾包含的文件,另一個文件夾包含的文件

[英]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.phplanguage/english.phpajax/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.phpconfig.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM