這一種方法適合,訪問相對集中在同樣內容頁面的網站,會自動生成緩存文件(相當于讀取靜態(tài)頁面,但會增大文件)。如果訪問不集中會造成服務器同時讀取文件當機。
注意:系統(tǒng)需要FSO權限、XMLHTTP權限
系統(tǒng)包括兩個文件,其實可以合并為一個。之所以分為兩個是因為部分殺毒軟件會因為里邊含有FSO、XMLHTTP操作而被認為是腳本木馬。
調用時,需要在ASP頁面的最上邊包含主文件,然后在下邊寫下以下代碼
% Set MyCatch=new CatchFile MyCatch.Overdue=60*5 '修改過期時間設置為5個小時 if MyCatch.CatchNow(Rev) then response.write MyCatch.CatchData response.end end if set MyCatch=nothing %>
Private Sub Class_Initialize '初始化函數(shù)
'獲得服務器及腳本數(shù)據(jù)
ScriptName=Request.Servervariables("Script_Name") '識別出當前腳本的虛擬地址
ScriptPath=GetScriptPath(false) '識別出腳本的完整GET地址
ServerHost=Request.Servervariables("Server_Name") '識別出當前服務器的地址
'初始化系統(tǒng)參數(shù)
Overdue=30 '默認30分鐘過期
Mark="NoCatch" '無Catch請求參數(shù)為 NoCatch
CFolder=GetCFolder '定義默認的Catch文件保存目錄
CFile=Server.URLEncode(ScriptPath)".txt" '將腳本路徑轉化為文件路徑
CatchData=""
end Sub
Private Function GetCFolder
dim FSO,CFolder
Set FSO=CreateObject("Scripting.FileSystemObject") '設置FSO對象
CFolder=Server.MapPath("/")"/FileCatch/"
if not FSO.FolderExists(CFolder) then
fso.CreateFolder(CFolder)
end if
if Month(Now())10 then
CFolder=CFolder"/0"Month(Now())
else
CFolder=CFolderMonth(Now())
end if
if Day(Now())10 then
CFolder=CFolder"0"Day(Now())
else
CFolder=CFolderDay(Now())
end if
CFolder=CFolder"/"
if not FSO.FolderExists(CFolder) then
fso.CreateFolder(CFolder)
end if
GetCFolder=CFolder
set fso=nothing
End Function
Private Function bytes2BSTR(vIn) '轉換編碼的函數(shù)
dim StrReturn,ThisCharCode,i,NextCharCode
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode H80 Then
strReturn = strReturn Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn Chr(CLng(ThisCharCode) * H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
Public Function CatchNow(Rev) '用戶指定開始處理Catch操作
if UCase(request.Servervariables("Request_Method"))="POST" then
'當是POST方法,不可使用文件Catch
Rev="使用POST方法請求頁面,不可以使用文件Catch功能"
CatchNow=false
else
if request.Querystring(Mark)>"" then
'如果指定參數(shù)不為空,表示請求不可以使用Catch
Rev="請求拒絕使用Catch功能"
CatchNow=false
else
CatchNow=GetCatchData(Rev)
end if
end if
End Function
Private Function GetCatchData(Rev) '讀取Catch數(shù)據(jù)
Dim FSO,IsBuildCatch
Set FSO=CreateObject("Scripting.FileSystemObject") '設置FSO對象,訪問CatchFile
If FSO.FileExists(CFolderCFile) Then
Dim File,LastCatch
Set File=FSO.GetFile(CFolderCFile) '定義CatchFile文件對象
LastCatch=CDate(File.DateLastModified)
if DateDiff("n",LastCatch,Now())>Overdue then
'如果超過了Catch時間
IsBuildCatch=true
else
IsBuildCatch=false
end if
Set File=Nothing
else
IsBuildCatch=true
End if
If IsBuildCatch then
GetCatchData=BuildCatch(Rev) '如果需要創(chuàng)建Catch,則創(chuàng)建Catch文件,同時設置Catch的數(shù)據(jù)
else
GetCatchData=ReadCatch(Rev) '如果不需要創(chuàng)建Catch,則直接讀取Catch數(shù)據(jù)
End if
Set FSO=nothing
End Function
Private Function GetScriptPath(IsGet) '創(chuàng)建一個包含所有請求數(shù)據(jù)的地址
dim Key,Fir
GetScriptPath=ScriptName
Fir=true
for Each key in Request.QueryString
If Fir then
GetScriptPath=GetScriptPath"?"
Fir=false
else
GetScriptPath=GetScriptPath""
end if
GetScriptPath=GetScriptPathServer.URLEncode(Key)"="Server.URLEncode(Request.QueryString(Key))
Next
if IsGet then
If Fir then
GetScriptPath=GetScriptPath"?"
Fir=false
else
GetScriptPath=GetScriptPath""
end if
GetScriptPath=GetScriptPathServer.URLEncode(Mark)"=yes"
end if
End Function
'創(chuàng)建Catch文件
Private Function BuildCatch(Rev)
Dim HTTP,Url,OutCome
Set HTTP=CreateObject("Microsoft.XMLHTTP")
' On Error Resume Next
' response.write ServerHostGetScriptPath(true)
HTTP.Open "get","http://"ServerHostGetScriptPath(true),False
HTTP.Send
if Err.number=0 then
CatchData=bytes2BSTR(HTTP.responseBody)
BuildCatch=True
else
Rev="創(chuàng)建發(fā)生錯誤:"Err.Description
BuildCatch=False
Err.clear
end if
Call WriteCatch
set HTTP=nothing
End Function
Private Function ReadCatch(Rev)
ReadCatch=IReadCatch(CFolderCFile,CatchData,Rev)
End Function
Private Sub WriteCatch
Dim FSO,TSO
Set FSO=CreateObject("Scripting.FileSystemObject") '設置FSO對象,訪問CatchFile
set TSO=FSO.CreateTextFile(CFolderCFile,true)
TSO.Write(CatchData)
Set TSO=Nothing
Set FSO=Nothing
End Sub
End Class
%>
文件二:FileCatch-Inc.asp
asp硬盤緩存代碼2
%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> % Response.CodePage=65001%> % Response.Charset="UTF-8" %> % '該程序通過使用ASP的FSO功能,減少數(shù)據(jù)庫的讀取。經測試,可以減少90%的服務器負荷。頁面訪問速度基本與靜態(tài)頁面相當。 '使用方法:將該文件放在網站里,然后在需要引用的文件的“第一行”用include引用即可。 '=======================參數(shù)區(qū)============================= DirName="cachenew\" '靜態(tài)文件保存的目錄,結尾應帶"\"。無須手動建立,程序會自動建立。 'TimeDelay=10 '更新的時間間隔,單位為分鐘,如1440分鐘為1天。生成的靜態(tài)文件在該間隔之后會被刪除。 TimeDelay=300 '======================主程序區(qū)============================ foxrax=Request("foxrax") if foxrax="" then FileName=Server.URLEncode(GetStr())".txt" FileName=DirNameFileName if tesfold(DirName)=false then'如果不存在文件夾則創(chuàng)建 createfold(Server.MapPath(".")"\"DirName) end if if ReportFileStatus(Server.MapPath(".")"\"FileName)=true then'如果存在生成的靜態(tài)文件,則直接讀取文件 Set FSO=CreateObject("Scripting.FileSystemObject") Dim Files,LatCatch Set Files=FSO.GetFile(Server.MapPath(FileName)) '定義CatchFile文件對象 LastCatch=CDate(Files.DateLastModified) If DateDiff("n",LastCatch,Now())>TimeDelay Then'超過 List=getHTTPPage(GetUrl()) WriteFile(FileName) Else List=ReadFile(FileName) End If Set FSO = nothing Response.Write(List) Response.End() else List=getHTTPPage(GetUrl()) WriteFile(FileName) end if end if '========================函數(shù)區(qū)============================ '獲取當前頁面url Function GetStr() 'On Error Resume Next Dim strTemps strTemps = strTemps Request.ServerVariables("URL") If Trim(Request.QueryString) > "" Then strTemps = strTemps "?" Trim(Request.QueryString) else strTemps = strTemps end if GetStr = strTemps End Function '獲取緩存頁面url Function GetUrl() On Error Resume Next Dim strTemp If LCase(Request.ServerVariables("HTTPS")) = "off" Then strTemp = "http://" Else strTemp = "https://" End If strTemp = strTemp Request.ServerVariables("SERVER_NAME") If Request.ServerVariables("SERVER_PORT") > 80 Then strTemp = strTemp ":" Request.ServerVariables("SERVER_PORT") end if strTemp = strTemp Request.ServerVariables("URL") If Trim(Request.QueryString) > "" Then strTemp = strTemp "?" Trim(Request.QueryString) "foxrax=foxrax" else strTemp = strTemp "?" "foxrax=foxrax" end if GetUrl = strTemp End Function '抓取頁面 Function getHTTPPage(url) Set Mail1 = Server.CreateObject("CDO.Message") Mail1.CreateMHTMLBody URL,31 AA=Mail1.HTMLBody Set Mail1 = Nothing getHTTPPage=AA 'Set Retrieval = Server.CreateObject("Microsoft.Xmlhttp") 'Retrieval.Open "GET",url,false,"","" 'Retrieval.Send 'getHTTPPage = Retrieval.ResponseBody 'Set Retrieval = Nothing End Function Sub WriteFile(filePath) On Error Resume Next dim stm set stm=Server.CreateObject("adodb.stream") stm.Type=2 'adTypeText,文本數(shù)據(jù) stm.Mode=3 'adModeReadWrite,讀取寫入,此參數(shù)用2則報錯 stm.Charset="utf-8" stm.Open stm.WriteText list stm.SaveToFile Server.MapPath(filePath),2 'adSaveCreateOverWrite,文件存在則覆蓋 stm.Flush stm.Close set stm=nothing End Sub Function ReadFile(filePath) dim stm set stm=Server.CreateObject("adodb.stream") stm.Type=1 'adTypeBinary,按二進制數(shù)據(jù)讀入 stm.Mode=3 'adModeReadWrite ,這里只能用3用其他會出錯 stm.Open stm.LoadFromFile Server.MapPath(filePath) stm.Position=0 '把指針移回起點 stm.Type=2 '文本數(shù)據(jù) stm.Charset="utf-8" ReadFile = stm.ReadText stm.Close set stm=nothing End Function '讀取文件 'Public Function ReadFile( xVar ) 'xVar = Server.Mappath(xVar) 'Set Sys = Server.CreateObject("Scripting.FileSystemObject") 'If Sys.FileExists( xVar ) Then 'Set Txt = Sys.OpenTextFile( xVar, 1,false) 'msg = Txt.ReadAll 'Txt.Close 'Response.Write("yes") 'Else 'msg = "no" 'End If 'Set Sys = Nothing 'ReadFile = msg 'End Function '檢測文件是否存在 Function ReportFileStatus(FileName) set fso = server.createobject("scripting.filesystemobject") if fso.fileexists(FileName) = true then ReportFileStatus=true else ReportFileStatus=false end if set fso=nothing end function '檢測目錄是否存在 function tesfold(foname) set fs=createobject("scripting.filesystemobject") filepathjm=server.mappath(foname) if fs.folderexists(filepathjm) then tesfold=True else tesfold= False end if set fs=nothing end function '建立目錄 sub createfold(foname) set fs=createobject("scripting.filesystemobject") fs.createfolder(foname) set fs=nothing end sub '刪除文件 function del_file(path) 'path,文件路徑包含文件名 set objfso = server.createobject("scripting.FileSystemObject") 'path=Server.MapPath(path) if objfso.FileExists(path) then '若存在則刪除 objfso.DeleteFile(path) '刪除文件 else 'response.write "script language='Javascript'>alert('文件不存在')/script>" end if set objfso = nothing end function %>
標簽:河池 延邊 銅川 那曲 蘇州 電商邀評 新鄉(xiāng) 優(yōu)質小號
巨人網絡通訊聲明:本文標題《asp磁盤緩存技術使用的代碼》,本文關鍵詞 asp,磁盤,緩存,技術,使,用的,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。