php絕對路徑與相對路徑之間關係的的分析

2022-09-26 19:39:16 字數 2692 閱讀 9004

php中好像不能像asp那樣用「/」表示根目錄,代之以$_server['document_root'],其它則相同:../表示向上一層。./表示當前層。假如現在a/b/c/s.php要呼叫根目錄下的 /bb/s2.txt,則:

$rootdir = $_server['document_root'];

$firedir = "$rootdir/bb/s2.txt";

或者:「../../../bb/s2.txt」表示向上返回到b再向上到a再向上到根目錄然後到bb下。

前一陣子老是受php開發中,檔案互相引入require()相對位置關係的困擾,為了徹底弄清它們的關係,筆者做了個實驗。

以下是實驗圖:

當前專案(project2)的絕對路徑是:d:\www\php_case\coucom_make。也就是我們當前專案的根目錄root.

為了能更加清楚的表述不同級別的目錄檔案相互的引入問nnonlqx題,偶大膽將引用分成三種型別即:上級對下級的引用(簡稱上級引用,英文譯為:superior to underling。簡稱(stou)).

下級對上級的引用(簡稱下級引用,英文反之便是)

平級引用或叫同級引用(英文:paratactic)。  

好了,我們明確了引用型別,下面我們來看不同型別引用它們有著什麼樣的規則。

我們先來說說上級引用:

看我們的實驗圖,在圖中專案下分別有aa bb ee 三個同級目錄和乙個index.php檔案,在bb下又有cc目錄,cc下又有dd目錄和cc.php ccc.php兩個檔案,同樣dd下也包含乙個dd.php檔案。凡是上層對下層均屬上級引用.

例如:index.php對於所有檔案的引用:

cc .php對dd.php的引用:

ee.php對dd.php的引用:

大家仔細看一下目錄結構,便會發現這三種引用雖然同屬於上級引用,但它們又不完全相同,我把它分成兩種情況:即在上級引用中存在兩種引用情況:1.從屬的上級引用(類如cc.php對dd.php,,因為這兩個檔案同屬於cc目錄)2.非從屬的上級引用(類如index.php對於所有檔案的引用和ee.php對dd.php的引用nnonlqx都屬於這種情況因為它們與被引用的檔案並沒有乙個共同的父目錄,在能相對於站點根目錄).

對於從屬上級引用:

以下是在cc.php對dd.php的引用

require('dd/dd.php');

對於非從屬上級引用:

以下是在ee.php中對cc.php的引用

require('../bb/cc/cc.php');

以上所說的是上級引用,下面我們來了解一下下級引用!同理下層對上層的引用都屬於下級引用,同樣分成從屬與非從屬兩類,從屬下級引用相對路徑以它們的父目錄為根目錄,例如:

ttt.php對bbff.php的引用就屬於這種情況:require('../bb/cc/cc.php');

非從屬的下級引用卻是以**的根目錄為準的,例如:

ccc.php對ee.php的引用: require('../../ee/ee.php');

以上是下級引用的介紹,最後我們來看一下平級引用或者叫同級引用,其實同級引用也是分為這兩種情況:從屬同級引與非從屬同級引用

從屬同級引用很簡單:即在同乙個目錄下的兩個檔案的引用

例如:在dd.php中引用ttt.php require('ttt.php');

非從屬同級引用:即不在同乙個目錄下(沒有共同的父目錄,只有以**目站為父目錄的情況),但是級別是相同的兩個檔案的引用,例如: 在aa.php在引用ee.php   require('../ee/ee.php');

以上是三種型別不同情況下的引用,另外還有涉及到巢狀引用的問題

比如:ff.php引用dd.php,而dd.php又引用的gf.php,這種情況,本來dd.php 引用gf.php屬於下級引用中的非從屬引用,寫法是這樣的:require('../../../ee/gf.php');而ff.php引用dd.php屬於上級引用中的從屬引用,寫法是這樣的:require('./cc/dd/dd.php'); 可是你會發現在ff.php中無法找到gf.php檔案,那該如何寫呢?我告訴你應該在dd.php中這樣寫:require('../ee/gf.php');只有這樣寫就正確了,為什麼呢?因為在涉及到巢狀引用的時候被引用檔案的相對路徑www.cppcns.com要以最終的引用檔案為程式設計客棧準!

簡而言之:

其實很簡單的,你用你的web根目錄做根目錄.不管你怎麼定,你檔案肯定有乙個全部都要包含的檔案的,比如有的較global.php,有的較common.php

假如這個檔案放再根目錄

wwwroot/global.php

裡面第一行你加個chdir(dirname(__file__)); //切換到global.php所在目錄就是跟目錄

其他檔案使用

require "../../../global.php";

requirwww.cppcns.come "aa/aa.php";

require "bb/bb/cc.php";

這樣就行了,因為你的global.php已經把路徑切換到wwwroot了,你不用像很多人那麼麻煩

define('root_path',dirname(__file__));

require root_path.....

chdir(dirname(__file__)); 的確很好使,相對位置引入這個檔案其他引入檔案只要以他為基準就好了。

本文標題: php絕對路徑與相對路徑之間關係的的分析

本文位址:

相對路徑與絕對路徑

相對路徑 以引用檔案之網頁所在位置為參考基礎,而建立出的目錄路徑。因此,當儲存於不同目錄的網頁引用同乙個檔案時,所使用的路徑將不相同,故稱之為相對。絕對路徑 以web站點根目錄為參考基礎的目錄路徑。之所以稱為絕對,意指當所有網頁引用同乙個檔案時,所使用的路徑都是一樣的。其實絕對路徑與相對路徑的不同處...

相對路徑與絕對路徑

相對路徑與絕對路徑 絕對路徑 舉例.c盤中windows目錄中system32中的ias資料夾,即c windows system32 ias 相對路徑 舉例。c盤中windows目錄中system32中的ias資料夾和c盤中windows目錄中system32中的0409資料夾,ias相對於040...

絕對路徑與相對路徑

無論是在windows還是linux作業系統下,絕對路徑和相對路徑都是很重要的概念,也是許多初學者迷惑的地方,下面我們就這兩個概念進行介紹。絕對路徑 由根目錄 開始寫起的檔名或者目錄名稱,例如 home student 相對路徑 相對於目前路徑的檔名寫法。例如.home student或者.home...