首先我們先來看一下我們這個例子的目錄結(jié)構(gòu)以及這三個文件的內(nèi)容。
a.php
<?php include './c/d.php'
b.php
<?php define('__B', 'this is a test');
c/d.php
<?php include '../b.php'; var_dump(__B);
在c目錄下面的d.php文件,引用了它的上級目錄下的 b.php 文件,單獨運行 c/d.php 的時候不會出問題,但是,如果在和b同級目錄下的a.php引用c/d.php的話,就會出問題了,它會報錯說文件不存在。
思考:
大概意思就是 a.php 把 c/d.php 引入到 a.php 中后, include '../b.php' 這個路徑就是相對于 a.php 來說的了,然后對于 a.php 來說的這個相對路徑它是不存在的,所以就出現(xiàn)了這個問題。如果一個文件可能在多個地方被引用的時候使用相對路徑就相當(dāng)容易出問題,然后我們使用絕對路徑能夠輕松解決這個問題。
使用絕對路徑解決問題
a.php
<?php include __DIR__.'/../b.php'; var_dump(__B);
b.php
<?php define('__B', 'this is a test');
c/d.php
<?php define('__B', 'this is a test');
這樣就改成了對文件的絕對路徑進行引用了, __DIR__
是php5.3開始中就有的預(yù)定義的魔術(shù)常量,表示這個文件所在的目錄,然后我們利用這個來可以寫出絕對路徑,在運行a.php和c/d.php的時候都能夠正常執(zhí)行了,如果在php5.3之前都是使用dirname(__FILE__)
來替代 __DIR___
。
總結(jié):在php中絕對路徑是指目錄下的絕對位置,直接到達目標(biāo)位置,通常是從盤符開始的路徑;相對路徑為以一個參照為基準(zhǔn),找到你所需要的文件即相對路徑是相對于目標(biāo)目錄的相對路徑。
以上內(nèi)容僅供參考!
推薦教程:PHP視頻教程