陽光銹了-ASP中#Include命令簡介
06-26
ASP中#Include命令簡介 #include命令是一個SSI(Server-Side Include)指令,用於在腳本中的當前位置插入另一個文件中的內容。解釋一個ASP文件時,伺服器首先檢查要處理的#include,將包含文件找出來,然後將文件中的代碼包含進來,再繼續處理後面的#include命令,最後從頭到尾解釋執行ASP代碼。 如果有人不清楚這些,就會造成一些困擾,如:被包含文件中使用了@或Option Explicit(強制聲明變數)等命令,程序執行時將會出現錯誤,因為@或Option Explicit指令都要在ASP文件的最前面,所以包含文件中出現此類指令,會導致程序出錯。 另外,會經常遇到Server.Mappath取得的路徑不對。如文件A包含了子目錄inc中的文件B,文件B中有Server.Mappath指令就會以文件A所在目錄的路徑為參照執行,也就是相當於文件A中的Server.Mappath所取得的路徑。因為文件B的內容被包含到文件A中作為文件A的源代碼執行,所以像Server.Mappath之類的命令取得的路徑就是文件A的路徑,並不是文件B所在的路徑。在ASP中include命令的語法如下:<!--#include virtual/file=Path|File--> 其中virtual表示虛擬路徑,為相對於伺服器上Web站點根目錄路徑中的文件,如為了引用在物理地址為"d:interpubwwwrootsamples"的一個文件(其中"d:interpubwwwroot"為站點根目錄),則virtual="/samples/samples.asp"。而file則表示相對於當前的ASP文件,如站點根目錄下有兩個目錄:PathA和PathB。PathA中的文件想包含PathB中的fileb.asp則,file="../PathB/fileb.asp",「..」表是上級目錄,如"../../"表示上上級目錄。 在實際應用中,我們常常會將創建資料庫連接的代碼放在一個單獨的文件中,需要連接資料庫了就將其包含進來,為了解決Server.Mappath引來的問題,我們可以將這段代碼封裝在一個Sub中,這樣只要將路徑作為參數傳給Sub就可以解決這個問題了。 如果需要動態包含ASP文件的話,在ASP3.0中已經提供了相應的方法,如:Server.Execute("filename.asp")。#include命令中的virtual="<%=sFileName%>"或file="<%=sFileName%>"這種方法是不允許的,所以#include只能是靜態包含文件。 曾經看到一些人寫了如下的代碼來包含文件:<%If 條件=true Then%><!--#include file="fileA.asp"--><%Else%><!--#include file="fileB.asp"--><%End If%>還有:<%Select Case 條件Case "條件1"%><!--#include file="file1.asp"--><%Case "條件2"%><!--#include file="file2.asp"-->......<%End Select%> 寫上面這些代碼的人的本意應該是想實現動態包含吧,由於對include指令的不了解,造成了這些錯誤的代碼。實現動態包含的代碼可以看看秋水寫的代碼(詳見《ASP動態include文件》)。前不久我用它來包含UTF-8編碼的ASP文件時,無法正確運行,於是我就改了一下,用Adodb.Stream來實現utf-8編碼的文件包含。<%『包含文件Sub Include(a_sFileName)Dim sASPCode,sFileName,sContentDim oStream,oRegDim iAspStart,iAspEndsFileName = Trim(a_sFileName)Set oStream = server.createobject("ADODB.Stream") oStream.Charset = "utf-8"oStream.OpenoStream.LoadFromFile sFileNamesContent=oStream.ReadTextoStream.CloseSet oStream = NothingSet oReg=new RegExpoReg.pattern="^s*="iAspEnd=1iAspStart=inStr(iAspEnd,sContent,"<%")+2Do while iAspStart>iAspEnd+1iAspEnd = InStr(iAspStart,sContent,"%>")+2Execute(oReg.Replace(Mid(sContent,iAspStart,iAspEnd-iAspStart-2),"Response.Write "))iAspStart=inStr(iAspEnd,sContent,"<%")+2LoopSet oReg=nothingEnd Sub%>
推薦閱讀:
推薦閱讀:
※美國主要電視網簡介(2006年新版)
※歷代詩歌佳作之作者簡介(二)(3)中唐作者
※中國觀賞石簡介1
※密宗的教義和典籍 - 真言宗簡介 - 顯密文庫 佛教文集