2009年10月27日

相對路徑與絕對路徑

之前在知識+回覆了一個問題「hinet空間上傳後無法開啟 20點」,其中有提到相對路徑與絕對路徑的問題,其中有一位網友說到:

當網站.網頁上傳至網際網路後沒有人還會把C:裡面的檔案當成網路上的路徑了.不管是絕對路徑或相對路徑.自己電腦裡的東西對於網際網路而言其實什麼都不是也沒有任何路徑關係.

假如網頁是放在自己電腦裡自己觀賞而已當然可以把自己電腦裡的檔案都以C:\...\....\檔名.副檔名當成網頁上檔案的路徑名稱.問題是既然網頁檔案都已經上傳至網際網路了還在討論C:裡的東西相對於網路上的網頁是絕對或相對路徑豈不可笑..即使是用自己電腦架伺服器也沒人會以C:來代表網際網路上該網頁與檔案的路徑關係.

任何一個檔案上傳至網際網路後就只有一個絕對路徑.全世界也沒有其他檔案路徑會跟它重複.這也就是所謂的檔案網址.
 
基本上YOGO不喜歡筆戰,但也借這個機會與各位朋友探討一下「何謂相對路徑與絕對路徑」,學網頁設計的朋友大部份應該都有去過「網站建置百寶箱」這個網站,其中有一篇「路徑表示法及SSI(上)】」寫的不錯,或是「鳥哥的 Linux 私房菜」「第七章、Linux 檔案與目錄管理」「1.1 相對路徑與絕對路徑」或是「HTML相對路徑(Relative Path)和絕對路徑(Absolute Path)」「講解 URL 結構與分享幾個相對路徑與絕對路徑的開發技巧 」這些都是寫的不錯的文章有興趣的朋友可以參考看看,其實就YOGO的認知來說 :
 
C:\web\folder\index.html

http://blog.yogo.tw/index.html
 
都屬於絕對路徑,或許有人會如上面的朋友所說"當網站.網頁上傳至網際網路後沒有人還會把C:裡面的檔案當成網路上的路徑了.不管是絕對路徑或相對路徑.自己電腦裡的東西對於網際網路而言其實什麼都不是也沒有任何路徑關係,即使是用自己電腦架伺服器也沒人會以C:來代表網際網路上該網頁與檔案的路徑關係."其實這部份並不全對,自架主機有時會,尤其是用PHP之類的網頁程式時會用到,就如這篇「Smarty 入門」文章中所寫的「第一個用Smarty寫的小程式」中的設定部份就會用到,而它這部份的設定是參考 XOOPS 的的設定。



另外關於上面的那位朋友再回覆中有提到"一般來說使用絕對路徑是不會出錯的.使用相對路徑才會容易出錯.雖然下載速度會差一點點但是人的視覺是感覺不出來的.",我想他所謂的「絕對路徑」應該是指「http://blog.yogo.tw/index.html 」這種路徑,其實YOGO是不建議使用他說的這種用法,原因有2:

1.缺少彈性及費時費功
以原提問者的內容他是使用Hinet提供的免費空間,除非它永遠都使用Hinet的網路,才能一直永久使用Hinet提供的免費空間,若有一天他覺得seednet的上網方案比較划算,改用seednet提供的免費空間,那它的圖片勢必跑不出來,有興趣者可以參考篇文章「8-2-2 相對路徑與絕對路徑」

2.速度較慢
就如上面那為朋友說的「速度會差一點點」,但他沒說原因,所以YOGO在此補充說明一下,若依照上面那位朋友對定義的絕對路徑為「http://blog.yogo.tw/index.html 」,因為「blog.yogo.tw」是網址,需透過「DNS的解析」才能知主機的正確位置,所以速度會比較慢(因為要等DNS的回應),再加上若查詢的DNS繁忙的話,反應速度會更慢,若有興趣的朋友可看一下下面文章。

DNS 的基本觀念
http://eservice.seed.net.tw/class/class08.html

DNS 的運作原理
http://eservice.seed.net.tw/class/class09.html


所以YOGO並不建議用上面那位朋友所定義的「絕對路徑」方式去設定,除非你有申請自己的網址,且確定域名永久不變,那使用這種方式倒也無妨,不過依然存在著DNS解析的速度問題;所以YOGO個人是建議最好是用「相對路徑」的方式會好一點;那麼上面朋友所說的「絕對路徑」方式不就完全沒有使用的地方?那倒也不是,像是透過MAIL發送的HTML圖文版的EDM或是交換連結,就需使用上面朋友所說的方式,圖片才能正常顯示。

至於YOGO所說的另一種「絕對路徑」(C:\web\folder\index.html),是需用在能解析PHP之類的網站主機上,至於為什麼要用這種路徑呢?優點有下面幾個:

1.避免引入的檔案位置錯誤
這裡有篇文章「require函數的問題」有興趣的朋友參考看看。

2.保護重要檔案不被下載
有時為了保護一些重要檔案不被下載,會在網頁根目錄之外另放一個資料夾,確保檔案不會被任意下載或WEB SERVER出錯時,目錄被任意瀏覽,導致重要檔案被下載。

有鑑於技術的進步,設計網頁很多人其實都不會HTLM語法,很多人都是用Dreamweaver之類的軟體來設計,但如果對這類軟體的操作若不熟,尤其是插入網頁根目錄之外的圖片,如



 
 
 
 
 
 
 
 
 
 
 
 
那這時路徑就會是 img src="file:///C /Users/YOGO/Pictures/6_648_0_1.jpg" width="373" height="342"
 

         
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  若將這個路徑存檔並上傳到網站空間圖一定跑不出來的,別以為這種事不可能發生,就YOGO回答網友的問題經驗來說,這種事的發生機率很高,有興趣的朋友也可參考一下這篇文章「絕對路徑與相對路徑」

以上是YOGO個人的一些小見解,若有任何意見歡迎提出來一起討論;題外話YOGO是個標準的霹靂布袋戲迷,想起上面那位朋友所說的問題是既然網頁檔案都已經上傳至網際網路了還在討論C:裡的東西相對於網路上的網頁是絕對或相對路徑豈不可笑。這段話後,讓YOGO想起劇中一個名叫「梅郎浦追昔」(http://drama.pili.com.tw/role/people.php?meng=meilang的角色開場詩:「少年無端愛令名,也無學術誤蒼生,白雲一笑懶如此,一遇天風吹便行。」,YOGO還真一度以為自己「不學無術、誤人子弟」,但YOGO認為有時候回答網友的問題,要將網友當初學者來看待,而不能以自身的程度來看網友提出的問題(雖然YOGO沒有什麼程度可言 > <),也或許有人會跟上面的網友一樣認為問題是既然網頁檔案都已經上傳至網際網路了還在討論C:裡的東西相對於網路上的網頁是絕對或相對路徑豈不可笑。,但別懷疑很多初學的網友圖片的路徑就是"C:\web\folder\01.jpg",然後就將檔案傳到web server上,這種事屢見不鮮,所以別以自己的角度看事情,該以自己當初是初學者的角度去看事情,這樣網友也會比較容易明白你所要表的東西,這是YOGO的一點小心得,與所有朋友分享一下吧^^。

延伸閱讀:[五分鐘教室] PHP 檔案引入路徑問題

如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。



2 則留言:

茶米 提到...

很實用的文章,一般跟學生討論說明時,就這一點不容易說明與溝通。很高興有這樣的文章出現,推薦大家來看。

YOGO 提到...

感謝米大的推薦,若能對各位朋友有所幫助,YOGO就覺得很高興了

聖誕跑趴歡樂降★韓版假兩件針織連衣裙$890,新款顯瘦棒球服連帽風衣外套下殺$510,冬新款歐美棉襖棉服連帽短款外套限量↘$530,秋冬新款韓版大碼毛領氣質毛料外套↘$680,快上左耳貓網路購物

您好!如圖太小看不清楚,請 點選此處 看詳細內容 左耳貓蝦皮賣場 https://shopee.tw/hrf5168 左耳貓 露天賣場 http://class.ruten.com.tw/user/index00.php?s=starbox 左耳貓粉...