PART1.絕對(duì)路徑與相對(duì)路徑實(shí)例
網(wǎng)站目錄有以下兩個(gè)文件:
D:\WWW\PHP\A.php
D:\WWW\PHP\B.php
絕對(duì)路徑演示:
A.php代碼如下:
<?php
echo 'Hello 我是A!'
?>
B.php代碼如下:
<!DOCTYPE html>
<?php
require ('D:\www\\php\a.php');
?>
這時(shí)打開B.PHP會(huì)顯示”Hello 我是A!”,如下圖:

在這個(gè)實(shí)例里,B的require就使用了絕對(duì)路徑.
但一般我們不這樣使用,因?yàn)楫?dāng)環(huán)境變化(比如換臺(tái)電腦或重裝系統(tǒng)改了WWW的位置)后,B的代碼就失效了.
相對(duì)路徑演示:
增加一個(gè)主頁(yè)文件
D:\WWW\index.php
Index.php代碼為:
<?php
echo '我是主頁(yè)!';
?>
B.php代碼如下:
<!DOCTYPE html>
<?php
require ('.\a.php');
echo “<br>”;
require ('..\index.php');
?>
這時(shí)打開B.PHP顯示如下圖:

在這個(gè)實(shí)例里,B的require使用了相對(duì)路徑.
.\表示當(dāng)前目錄
..\表示上級(jí)目錄
這樣不管網(wǎng)站的路徑環(huán)境如何改變,代碼始終有效.
PART2.二次require的相對(duì)路徑問題:
網(wǎng)站目錄有以下幾個(gè)文件:
D:\WWW\PHP\A.php
D:\WWW\PHP\B.php
D:\WWW\PHP\A.php
D:\WWW\PHP\A.php的代碼如下:
<?php
echo 'Hello 我是A!'
?>
D:\WWW\PHP\B.php的代碼如下:
<!DOCTYPE html>
<?PHP
require ('.\a.php');
?>
D:\WWW\A.php的代碼如下:
<?php
echo 'Hello 我是假A!'
?>
再增加三個(gè)文件,目標(biāo)都指向B.PHP
D:\WWW\1.php
代碼如下:
<?php
require ('.\php\b.php');
?>
D:\WWW2\2.php
代碼如下:
<?php
require ('..\www\php\b.php');
?>
D:\WWW\php\3.php
代碼如下:
<?php
require ('.\b.php');
?>
這時(shí)打開1.PHP會(huì)出現(xiàn)”Hello 我是假A!”的頁(yè)面.
打開2.PHP都會(huì)出現(xiàn)下面錯(cuò)誤提示.
Fatal error: require(): Failed opening required '.\a.php'
只有3.php是正常的顯示”Hello 我是A!”.
這是因?yàn)槎蝦equire后,B.PHP使用的相對(duì)路徑對(duì)其它文件來說不一定有效,所以才出現(xiàn)以上三種情況 .
如何解決呢?把B.PHP的路徑改為絕對(duì)路徑(D:\www\php\a.php)就好了.但我們前面已經(jīng)說了,絕對(duì)路徑并不適合復(fù)雜環(huán)境,還能怎么辦?
PHP5.3之后的版本給我們提供一個(gè)魔術(shù)常量,它就是:__DIR__
__DIR__:指向當(dāng)前執(zhí)行的PHP腳本所在的目錄.
因此,我們只需要把B.PHP的代碼改為:
<!DOCTYPE html>
<?PHP
require __DIR__ .('.\a.php');
?>
所有的問題都解決了.
PART3.跨目錄require的相對(duì)路徑問題
問題難度再升級(jí)一下,把A.PHP的路徑改為:
D:\WWW2\A.php
其它文件路徑不變.依然是:
D:\WWW\PHP\B.php
D:\WWW\1.php
D:\WWW2\2.php
D:\WWW\php\3.php
如果不改代碼,以上四個(gè)文件都是無法正常顯示的.
把B.PHP的代碼改為
<!DOCTYPE html>
<?PHP
require ('..\..\www2\a.php');
?>
之后B.PHP和3.PHP可正常顯示”Hello 我是A!”.
可是2.php和3.php還是報(bào)錯(cuò).
在不使用絕對(duì)路徑的情況下,且魔術(shù)常量__DIR__已經(jīng)不起作用,只有全局變量”$_SERVER['DOCUMENT_ROOT']”能拯救一切.
$_SERVER['DOCUMENT_ROOT']:當(dāng)前運(yùn)行腳本所在的文檔根目錄
把B.PHP的代碼改為
<!DOCTYPE html>
<?PHP
Require $_SERVER['DOCUMENT_ROOT']. ('.\www2\a.php');
?>
問題都解決.
注意事項(xiàng):
1.本文的編程環(huán)境為:windows10操作系統(tǒng)/PHP7.3軟件/Atom 編輯器.
2.另一個(gè)跟路徑有關(guān)的魔術(shù)常量為__FILE__:文件的完整路徑和文件名