国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

ASP動(dòng)態(tài)include文件

發(fā)布時(shí)間:2021-08-17 12:10 來(lái)源: 閱讀:0 作者: 欄目: ASP 歡迎投稿:712375056

 經(jīng)常有這樣的要求,根據不同的需求要求include不同的文件如各個(gè)人的不同設置,所以要求能動(dòng)態(tài)include文件受<! #include file="filename.asp" --> 宏限制
    必須存在該文件并且會(huì )預先編譯(不管前面是否加以條件)

    經(jīng)常有這樣的要求,根據不同的需求要求include不同的文件
    如各個(gè)人的不同設置,所以要求能動(dòng)態(tài)include文件。

    代碼如下:

Function include(filename)
 Dim re,content,fso,f,aspStart,aspEnd
 
 set fso=CreateObject("Scripting.FileSystemObject")
 set f=fso.OpenTextFile(server.mappath(filename))
 content=f.ReadAll
 f.close
 set f=nothing
 set fso=nothing
 
 set re=new RegExp
 re.pattern="^\s*="
 aspEnd=1
 aspStart=inStr(aspEnd,content,"<%")+2
 do while aspStart>aspEnd+1 
 Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
 aspEnd=inStr(aspStart,content,"%\>")+2
 Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
 aspStart=inStr(aspEnd,content,"<%")+2
 loop
 Response.write Mid(content,aspEnd) 
 set re=nothing
End Function

使用范例:

include("youinc.asp")

ASP可以動(dòng)態(tài)Include文件

<% 
'得到用戶(hù)所在的省份 
Dim Province 
Province = Request.form("Province") 
'下面顯示這個(gè)省份相關(guān)的信息 
%> 
<!--#include virtual="/ Province/<%= Province%>"--> 

你覺(jué)得上面的代碼可以工作嗎?不!簡(jiǎn)單地使用ASP來(lái)達到動(dòng)態(tài)包含,你不能達到你想要的效果。為什么?因為:Include命令先于A(yíng)SP代碼而得到執行,所以,上面的代碼并沒(méi)有按照作者的意愿,先得到用戶(hù)所在的省份,再包含這個(gè)省份的信息!
如果你確實(shí)需要動(dòng)態(tài)包含,你可以這樣做:

<%
Select Case Province
Case 1: %>
<!--#include file="1.asp"
<% Case 2: %>
<!--#include file="2.asp"
<% Case 3: %>
<!--#include file="3.asp"
<% End Select %>

應該說(shuō),這段代碼可以得到你想要的結果。但是,由于你的用戶(hù)可能來(lái)自于33個(gè)省,你難道包含33個(gè)文件?特別要說(shuō)明的是,SSInc.dll是不知道你究竟需要哪個(gè)包含文件的(事實(shí)上,這時(shí)候Province還沒(méi)有值),所以,她把所有的文件都包含進(jìn)來(lái)了!你可以想象,這時(shí)候的文件有多大!然后,ASP.DLL會(huì )去掃描這個(gè)文件中的ASP代碼,然后執行!
所以,每當這樣的時(shí)候,你應該考慮其他的思路,比如數據,或者采用FileSystemObject。

怎樣動(dòng)態(tài)Include文件?

解答
ASP程序員經(jīng)常面臨的最大挑戰之一是動(dòng)態(tài)Include文件。由于#include 在A(yíng)SP代碼執行之前處理,所以,看起來(lái),動(dòng)if/else的腦筋是不可能的。

真是這樣嗎?
根據你使用Include的目的,以及你將Include的文件數目,使用if/else也許可以解決問(wèn)題。但這絕對不是任何時(shí)候可以奏效的,而且也不是一種有效的解決辦法,因為你需要做許多的手工工作。

假設有兩個(gè)樣本HTM文件,1.htm和2.htm,為簡(jiǎn)化起見(jiàn),假設文件的內容如下:

<!-- 1.HTM: -->
<font color=#ff0000>This is 1.htm</font>
<!-- 2.HTM: -->
<font color=#0000ff>This is 2.htm</font>

現在我們來(lái)試試動(dòng)態(tài)Include:

<% 
if request.querystring('param')='2' then 
%> 
<!--#include file='2.htm'--> 
<% 
else 
%> 
<!--#include file='1.htm'--> 
<% 
end if 
%>

請注意:上面的兩個(gè)#include 實(shí)際上都得到了處理。你可以實(shí)際運行一下,看看效果:http://localhost/Test.asp?param=1

http://localhost/Test.asp?param=2
http://localhost/Test.asp

上面我們是把一個(gè)querystring作為條件。你還可以把時(shí)間、日期、瀏覽器版本等作為條件。但是,條件越復雜,這種方法的效率越差。下面提供了另外一種思路:

<% 
if request('param')='2' then 
filespec = '2.htm' 
else 
filespec = '1.htm' 
end if 
filespec = server.mapPath(filespec) 
scr = 'scripting.fileSystemObject'
set fs = server.createobject(scr) 
set f = fs.openTextFile(filespec) 
content = f.readall 
set f = nothing 
set fs = nothing 
response.write(content) 
%>

在IIS5.0/ASP3.0中,有兩種新的方法來(lái)支持“動(dòng)態(tài)包含”:

<%
server.transfer filename
server.execute filename
%>

如果正好使用的是IIS5.0和ASP3.0,那么Ok! 但是IIS5.0需要運行在Windows 2000上。

Asp包含文件include動(dòng)態(tài)包含方法(含變量)

很多時(shí)候,由于程序設計需要,要求在asp的include包含文件里調用動(dòng)態(tài)的文件。如<!--#include file="map1.asp"-->其中的1是個(gè)動(dòng)態(tài)參數,需要request獲取。但可惜的是,include語(yǔ)句里并不能含有變量,否則將提示找不到文件錯誤。本文將提供3種方法解決該問(wèn)題。

首先,我們需要了解,包含文件的提示和警告信息:被包含的文件可以包含其他文件。只要“#include”命令不導致循環(huán),.asp 文件也可以多次包含同一文件。例如,如果文件 First.asp 包含文件 Second.inc,則 Second.inc 不能反過(guò)來(lái)包含 First.asp。文件也不能包含其自身。ASP 檢測這樣的循環(huán)或嵌套錯誤,生成錯誤消息,并停止處理請求的 .asp 文件。
解決方法一:FSO調用方法

ASP語(yǔ)言是強大易用的語(yǔ)言,我們不要把自己的思維局限固定在一個(gè)角落里,“條條大道通羅馬”,一個(gè)思路不通,換個(gè)思路吧。

本方法采用變通的方法實(shí)現同樣的包含功能。即FSO調用。代碼如下:

<%
Function getFileContents(strIncludeFile) '函數:讀取包含文件內容
Dim objFSO,objText,strPage
Set objFSO = Server.CreateObject("Scripting.FileSystemObject") '調用FSO對象
Set objText = objFSO.OpenTextFile(Server.MapPath(strIncludeFile))
getFileContents = objText.ReadAll
objText.Close
Set objText = Nothing
Set objFSO = Nothing
End Function
dim p
p=request("p") '2種方式:request.form ,request.querystring
response.write getFileContents("map"&p&".asp")
%>

這樣,利用fso函數讀取包含文件的內容,然后用response.write把包含文件的內容輸出,即實(shí)現和include命令同樣的功能了,輕松實(shí)現自由輸出諸如 map1.asp,map2.asp… 等文件內容了。

解決方法二:if...elseif...

此方法適用于要包含的文件數量不多的情況下,也是懶人+笨人的方法,呵呵。代碼如下:

<%if a=1 then%>
<!--#include file="map1.asp"-->
<%elseif a=2 then%>
<!--#include file="map2.asp"-->
<%elseif a=3 then%>
<!--#include file="map3.asp"-->
<%end if%>

解決方法三:select case

方法和第二種差不多,稍微好點(diǎn)。代碼如下:

<%select case p
case 1%>
<!--#include virtual='inc/****1.asp'-->
<%case 2%>
<!--#include virtual='inc/****2.asp'-->
<%case 3%>
<!--#include virtual='inc/****3.asp'-->
<%case 4%>
<!--#include virtual='inc/****4.asp'-->
<%end select%>

如果你有其他更好的方法,歡迎與我們交流。您可以把你您的想法留在博客評論里,我們期待與您的探討。

補充:關(guān)于asp的include包含命令,需要注意以下方面。

ASP程序在執行腳本命令之前就已經(jīng)包含文件。因此,不能使用腳本命令來(lái)建立被包含的文件名。舉例來(lái)說(shuō),因為 ASP 試圖在將文件名指派給變量 name 之前執行“#include”命令,所以下面的腳本無(wú)法打開(kāi)文件 Header1.inc。

<!-- 該腳本將失敗 -->
<% name= header1.inc %>
<!-- #include file="<%= name %>" -->

腳本命令和過(guò)程必須完全包含在腳本分隔符 <% 和 %> 內,即 HTML 標簽 <SCRIPT> 和 </SCRIPT>,或 HTML 標簽 <OBJECT> 和 </OBJECT> 內部。也就是說(shuō),不能在包含 .asp 文件中打開(kāi)腳本分隔符,并在被包含的文件中關(guān)閉分隔符;腳本或腳本命令必須是一個(gè)完整的單元。例如,下面的腳本將不起作用:

<!-- 該腳本將失敗 -->
<%
For i = 1 To n
主文件中的語(yǔ)句
<!-- #include file="header1.inc" -->
Next
%>
但下面的腳本會(huì )起作用:
<%
For i = 1 to n
主文件中的語(yǔ)句
%>
<!-- #include file="header1.inc" -->
<% Next %>

如果 ASP 腳本包含的文件中存在包含腳本不需要的大量函數和變量,則這些無(wú)用的結構反而會(huì )影響性能,并最終降低 Web 應用程序的伸縮性。因此,通常將包含文件分成多個(gè)小文件,并且只包含那些服務(wù)器端腳本必需的文件,而不是包含那些帶有冗余信息的一個(gè)或多個(gè)大型包含文件。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

亚洲国产AV天码精品果冻传媒| 亚洲乱亚洲乱妇24p| 国内少妇偷人精品视频免费| 国产精品无码一区二区三区在| 国产乱色国产精品免费视频| 亚洲色精品AⅤ一区区三区|