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)
程式碼二:絕對地址 (test_image_2.html)<img src="../1.jpg" />
<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)