Php的路徑問題

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!”,如下圖:

圖片1.png

在這個(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顯示如下圖:

圖片2.png

在這個(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__:文件的完整路徑和文件名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容