asp磁盤緩存技術(shù)使用的代碼
這一種方法適合,訪問相對集中在同樣內(nèi)容頁面的網(wǎng)站,會自動生成緩存文件(相當于讀取靜態(tài)頁面,但會增大文件)。如果訪問不集中會造成服務器同時讀取文件當機。
注意:系統(tǒng)需要FSO權(quán)限、XMLHTTP權(quán)限
系統(tǒng)包括兩個文件,其實可以合并為一個。之所以分為兩個是因為部分殺毒軟件會因為里邊含有FSO、XMLHTTP操作而被認為是腳本木馬。
調(diào)用時,需要在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
%>
主包含文件:FileCatch.asp
<!--#include file="FileCatch-Inc.asp"-->
<%
'---- 本文件用于簽入原始文件,實現(xiàn)對頁面的文件Catch
'---- 1、如果文件請求為POST方式,則取消此功能
'---- 2、文件的請求不能包含系統(tǒng)的識別關鍵字
'---- 3、作者 何直群 (www.wozhai.com)
Class CatchFile
Public Overdue,Mark,CFolder,CFile '定義系統(tǒng)參數(shù)
Private ScriptName,ScriptPath,ServerHost '定義服務器/頁面參數(shù)變量
Public CatchData '輸出的數(shù)據(jù)
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" '將腳本路徑轉(zhuǎn)化為文件路徑
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=CFolder&Month(Now())
end if
if Day(Now())<10 then
CFolder=CFolder&"0"&Day(Now())
else
CFolder=CFolder&Day(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) '轉(zhuǎn)換編碼的函數(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(CFolder&CFile) Then
Dim File,LastCatch
Set File=FSO.GetFile(CFolder&CFile) '定義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=GetScriptPath&Server.URLEncode(Key)&"="&Server.URLEncode(Request.QueryString(Key))
Next
if IsGet then
If Fir then
GetScriptPath=GetScriptPath&"?"
Fir=false
else
GetScriptPath=GetScriptPath&"&"
end if
GetScriptPath=GetScriptPath&Server.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 ServerHost&GetScriptPath(true)
HTTP.Open "get","http://"&ServerHost&GetScriptPath(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(CFolder&CFile,CatchData,Rev)
End Function
Private Sub WriteCatch
Dim FSO,TSO
Set FSO=CreateObject("Scripting.FileSystemObject") '設置FSO對象,訪問CatchFile
set TSO=FSO.CreateTextFile(CFolder&CFile,true)
TSO.Write(CatchData)
Set TSO=Nothing
Set FSO=Nothing
End Sub
End Class
%>
文件二:FileCatch-Inc.asp
<%
Function IReadCatch(File,Data,Rev)
Dim FSO,TSO
Set FSO=CreateObject("Scripting.FileSystemObject") '設置FSO對象,訪問CatchFile
' on error resume next
set TSO=FSO.OpenTextFile(File,1,false)
Data=TSO.ReadAll
if Err.number<>0 then
Rev="讀取發(fā)生錯誤:"&Err.Description
ReadCatch=False
Err.clear
else
IReadCatch=True
end if
Set TSO=Nothing
Set FSO=Nothing
End Function
%>
asp硬盤緩存代碼2
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Response.CodePage=65001%>
<% Response.Charset="UTF-8" %>
<%
'該程序通過使用ASP的FSO功能,減少數(shù)據(jù)庫的讀取。經(jīng)測試,可以減少90%的服務器負荷。頁面訪問速度基本與靜態(tài)頁面相當。
'使用方法:將該文件放在網(wǎng)站里,然后在需要引用的文件的“第一行”用include引用即可。
'=======================參數(shù)區(qū)=============================
DirName="cachenew\" '靜態(tài)文件保存的目錄,結(jié)尾應帶"\"。無須手動建立,程序會自動建立。
'TimeDelay=10 '更新的時間間隔,單位為分鐘,如1440分鐘為1天。生成的靜態(tài)文件在該間隔之后會被刪除。
TimeDelay=300
'======================主程序區(qū)============================
foxrax=Request("foxrax")
if foxrax="" then
FileName=Server.URLEncode(GetStr())&".txt"
FileName=DirName&FileName
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
%>
相關文章
ASP類型網(wǎng)站結(jié)合動網(wǎng)論壇會員的方法
ASP類型網(wǎng)站結(jié)合動網(wǎng)論壇會員的方法...2007-11-11
ASP語言實現(xiàn)對SQL SERVER數(shù)據(jù)庫的操作
目前有很多介紹用ASP開發(fā)網(wǎng)絡數(shù)據(jù)庫的程序例子,但絕大部分是利用ACCESS作底層數(shù)據(jù)庫。相對于ACCESS而言,SQL SERVER數(shù)據(jù)庫系統(tǒng)要復雜得多,因此在程序開發(fā)中需要多做一些工作。筆者結(jié)合自己開發(fā)管理信息系統(tǒng)的經(jīng)驗,在此試舉一例,與感興趣的朋友共同交流2015-09-09
通過表單的做為二進制文件上傳request.totalbytes提取出上傳的二級制數(shù)據(jù)
通過表單的做為二進制文件上傳request.totalbytes提取出上傳的二級制數(shù)據(jù)的代碼說明。2009-09-09

