asp中Server.MapPath的使用方法
老是忘記Server.MapPath的使用方法了,下面記錄一下,以備後用:
總注:Server.MapPath獲得的路徑都是服務器上的物理路徑,也就是常說的絕對路徑
1、Server.MapPath("/")
注:獲得應用程序根目錄所在的位置,如 C:\Inetpub\wwwroot\。
2、Server.MapPath("./")
注:獲得所在頁面的當前目錄,等價於Server.MapPath("")。
3、Server.MapPath("../")
注:獲得所在頁面的上級目錄。
4、Server.MapPath("~/")
注:獲得當前應用級程序的目錄,如果是根目錄,就是根目錄,如果是虛擬目錄,就是虛擬目錄所在的位置,如C:\Inetpub\wwwroot\Example\。
先看圖:
1,首先在本機E盤下面建立red文件夾,夾子內繼續建立conn.asp文件,文件內容如下:
主要調試三種路徑最後顯示的結果。
2,在red文件夾下面建立文件夾database,該夾子內部存放cnbruce.mdb文件。
所以現在可以很肯定的知道數據庫文件的絕對路徑是:E:/red/database/cnbruce.mdb
以上應該沒有問題吧,很明白的繼續往下看,不明白的趕快學下windows操作系統 -_-!
3,為了進行比較對照,繼續在red文件夾下面建立blue文件夾,該夾子內部存放同樣的conn.asp文件
4,當然很重要的就是對red文件夾進行虛擬目錄的設定。方法是在red文件夾上右鍵鼠標,選擇“共享...”,彈出窗口中繼續選擇“Web共享”標簽,選擇“共享這個文件夾”,別名設為“red”。最後“確定”。
5,OK,現在就可以來調試兩個conn.asp文件了。
先看red文件夾下面的,輸入的URL應該是:http://localhost/red/conn.asp
觀看結果可以知道其中只有一個正確,那就是
<%=Server.Mappath("database/cnbruce.mdb")%>
6,再來看red文件夾下的blue文件夾內的,URL:http://localhost/red/blue/conn.asp
觀察結果,仍然有一個正確,那就是
<%=Server.Mappath("../database/cnbruce.mdb")%>
7,來總結下:為什麼兩次顯示正確路徑的不是同一代碼呢?
很顯然是相對路徑的緣故。red文件夾下的conn.asp文件和database文件夾是兄弟關系,所以要找到cnbruce.mdb,就可以直接database/cnbruce.mdb
而blue文件夾下的conn.asp和database文件夾是侄叔關系,要找cnbruce.mdb,當然是../database/cnbruce.mdb,其中../就是到上一層。
8,那再看<%=Server.Mappath("/database/cnbruce.mdb")%>兩次顯示的都是一樣的效果,都指向到c:\inetpub\wwwroot\下面了,那就是因為在"database"前面添加了"/",表示到達根目錄,而本地的IIS虛擬根目錄就是c:\inetpub\wwwroot\,這在默認Web站點屬性裡面有。
9,注意,再看!一直都是在本地的,那上傳到網絡上有是怎麼樣呢?
首先,要正確清醒地知道conn.asp連接文件和*.mdb數據庫文件的地址關系
接著,選擇正確的Server.Mappath轉換方法
建議,最好不采用"/"路徑。因為這涉及到虛擬主機和非虛擬主機的問題。
所謂虛擬主機,比如我本人的站點,其虛擬的根目錄就是網站本身的根目錄,不存在轉向到c:\inetpub\wwwroot\的問題。
可以看出:采用"/"的時候的路徑顯示就是本站的根地址。
10,一定要注意!
萬裡長征已經到最後了,說什麼也要支持住~!
我們雖然知道了conn.asp文件內容的寫法,但在我們引用的時候應該要注意include包含文件的實質:被包含文件是在包含文件中執行顯示的。
所以,無論conn.asp放在哪裡,無論conn.asp的內容如何,最後都是取決於包含該文件的文件位置和數據庫的位置關系。