| 以前看了,很多框架,基本上很少使用相對路徑包含。而一般很多做php web站點,喜歡用相對路徑。 認(rèn)為這樣,無論目錄放到那里。 只要跟另外目錄關(guān)系一致。那么就不會出現(xiàn)問題。如果一個站點,一般都認(rèn)為,如果用根目錄,經(jīng)常會改變網(wǎng)站地址,覺得很不方便。其實,我們從各大常見框架里面會發(fā)現(xiàn),基本上都是采用是絕對路徑方法。 
 我們有如下結(jié)構(gòu)的目錄。 <web>(網(wǎng)站根目錄) ├<a>文件夾 │ │ │ └a.php ├<b>文件夾 │ │ │ └b.php └test.php 
 如果b.php 包含a.php (include(“../a/a.php”)) ,然后test.php 包含b.php (include(“b/b.php”)) ,我們發(fā)現(xiàn)很奇怪問題。 首先訪問:b.php 可以正常訪問, 然后訪問test.php 發(fā)現(xiàn),找不到 a.php了。 這里注意一個問題是:php 默認(rèn)相對路徑都是以,被訪問頁面所在路徑為準(zhǔn)的。無論一個入口頁面,里面包含多少文件,相對路徑,都是以這個頁面為準(zhǔn)。 如果訪問test.php 根路徑是:test.php,如果訪問b.php 相對路徑都以b.php 所在路徑為準(zhǔn)。剛剛頁面test.php 包含了b.php,b.php包含了a.php. 所有包含都以test.php 為準(zhǔn)的。 估計剛剛開始php學(xué)習(xí)朋友,經(jīng)常遇到這個問題,而且發(fā)現(xiàn)經(jīng)常出現(xiàn)一大堆警告影響大家學(xué)習(xí)的興趣。 
 各大開源框架基本上采用絕對路徑方法,這樣可以避免相對路徑因為包含訪問文件變了。基準(zhǔn)路徑變化,讓包含出現(xiàn)錯誤了。 所以,我們看看常見方法。 首先將網(wǎng)站基準(zhǔn)訂到一個固定文件。一般可以用下面方法實現(xiàn)。如:根目錄下面有個config.php文件。 
 __FILE__ 至的是當(dāng)前腳本路徑,在那個腳步php里面調(diào)用該變量,它的值就是該腳步的絕對路徑。 然后,任何其它頁面,在做包含時候,只需要包含了該config.php后。 
 
 
 使用解決路徑好處除了可以在大型項目中,包含時候更準(zhǔn)確定位到文件,不易產(chǎn)生錯誤外。還有另外一個好處,包含文件,性能會得到很大提升。 如果給一個相對位置包含,php查找該文件,一般會在set_include_path 函數(shù),設(shè)置的所有路徑里面去搜索。 我們知道,要一個一個去嘗試,列舉目錄,然后查找文件。這直接會消耗大的IO。 也會消耗很多性能。 如果我們用絕對包含,直接就可以準(zhǔn)確判斷出,文件是否存在。不會去set_include_path設(shè)置目錄去查找了。 以上問題,對于剛剛接觸到php大型項目開發(fā),可能會很容易遇到。歡迎討論! | 
|  |