1. 程式人生 > >php 絕對路徑 相對路徑

php 絕對路徑 相對路徑

淺談PHP中使用絕對路徑和相對路徑

作者:林子木

為防止惡意轉載,放本文連結   http://blog.csdn.net/wolinxuebin/article/details/7731684

可能本文有錯誤,會及時修改,請參看上面連結,檢視最新更新。

   今天在做專案,發生了點疑惑。就是關於絕地址和相對地址的問題。

下面看兩段程式碼:

      程式碼一:相對地址訪問

<meta http-equiv="Content-Type"content="text/html;charset=GBK">

<?php 
	echo $_SERVER['DOCUMENT_ROOT'];
?>
	<img src="../1.jpg" />


      程式碼二:絕對地址訪問

<meta http-equiv="Content-Type"content="text/html;charset=GBK">

<?php 
	echo $_SERVER['DOCUMENT_ROOT'];
?>
	<img src="C:/Program Files/Zend/Apache2/htdocs/1.jpg" />
 

先把這兩個放一下,讓我們來講純的html程式碼(ps:現在是測試,那麼我就寫的簡略點,但是能得出結果)

    程式碼一:相對地址 (test_image_1.html)

<img src="../1.jpg" />
     程式碼二:絕對地址 (test_image_2.html)
<img src="C:/Program Files/Zend/Apache2/htdocs/1.jpg" />

(ps:圖片目錄:C:/Program Files/Zend/Apache2/htdocs/1.jpg

          html目錄:C:/Program Files/Zend/Apache2/htdocs/test_image/)

備註:本機上安裝了appache,是Zend的融合包中的。

    兩種方式,第一種是直接雙擊開啟檔案,test_image_1和test_image_2都是可以開啟的,URL中顯示的是C:/Program Files/Zend/Apache2/htdocs/test_image/test_image_1,這樣圖片都是可以顯示的。

    第二種方式,通過appache訪問,使用URL:127.0.0.1/test_image/test_image_1訪問,結果是使用相對路徑的可以正常實現,絕對路徑的不能顯示

   查了很多資料,終於可以得出結論了。直接開啟html檔案,因為在你的計算機下,那麼絕對路徑就可以輕鬆的訪問。但是通過WEB訪問,那麼WEB預設的根目錄是htdocs/,在你計算機中,這個目錄是C:/Program Files/Zend/Apache2/htdocs/但是WEB不怎麼認為,在它的認識裡面不知道有c:這玩意兒。所以你認為的絕對路徑,是在你計算機裡面的絕對路徑,但是通過WEB不認識這個路徑。

  正確的方式應該是如下兩程式碼:

   程式碼一:相對地址 (test_image_1.html)

<img src="../1.jpg" />

   相對路徑完全沒問題。    所以一般都是建議使用相對路徑便於移植。

程式碼二:絕對地址 (test_image_2.html)

<img src=/1.jpg" />
   這裡的跟目錄是/所以這樣才是絕對路徑

    如果你的圖片,換了個位置,在你計算機絕對路徑下是C:/Program Files/Zend/Apache2/htdocs/111/222/333/1.jpg

    那麼程式碼就應該寫成:

<img src=/111/222/333/1.jpg" />
    綜上所訴,不要把計算機的絕對路徑和WEB伺服器的絕對路徑搞混了。

       經過上面的講解,應該理解html方式的絕對路徑和相對路徑了。

       那麼讓我們來看看文章開頭給出的PHP的形式。

       程式碼一:相對地址訪問 test_image_1.php

<meta http-equiv="Content-Type"content="text/html;charset=GBK">

<?php 
	echo $_SERVER['DOCUMENT_ROOT'];
?>
	<img src="../1.jpg" />


      程式碼二:絕對地址訪問 test_image_2.php

<meta http-equiv="Content-Type"content="text/html;charset=GBK">

<?php 
	echo $_SERVER['DOCUMENT_ROOT'];
?>
	<img src="C:/Program Files/Zend/Apache2/htdocs/1.jpg" />
     首先要理解PHP的執行方式,當你訪問一個PHP的時候,會觸發此PHP執行,PHP經過appache解析後(言外之意,就是說php已經執行完了,顯示了些結果),生成了一下HTML程式碼,也就是簡單的說,到你手上的php,其實就可html一樣。php是在伺服器端執行完畢然後再送到你的手裡的。所以剛開始我也沒完全理解,用php做一些動作,比如提交表格什麼的,其實不是php的事了,而是html的動作。到你手裡的,能顯示的,是披著.php字尾的,html程式碼。

     在說說在PHP眼裡的絕對地址,當然,php認識你計算機的絕對路徑了,比如你要用php開啟一個檔案,用php讀取本機上一個圖片的大小,解析度什麼的,完全可以使用絕對路徑(相對路徑更沒有問題)。

     但是PHP執行完後,將會把結果在你的網頁端顯示,那麼比如:

<img src="C:/Program Files/Zend/Apache2/htdocs/1.jpg" />
這程式碼,雖然寫在PHP檔案當中,但是他只是HMTL程式碼,因此此時就不光PHP的事了,而是html上馬了,而HTML和WEB有關,WEB不認識你這個路徑了(原因上面已經講了)。所以現在是WEB不認識計算機的絕對路徑,而不是你的PHP不認識。

    在提一點,WEB的根目錄是/但是,你的圖片在它認為的根目錄上一級,也是可以訪問的,程式碼如下:

img src="../../1.jpg" />
    (原先1.jpg在跟目錄下,而html程式碼放在/image_test/下,所以要../1.jpg,才能訪問,

     而現在1.jpg在根目錄上一級,那麼我們就再回退一級就可以訪問到了,../../1.jpg)