asp磁盘缓存技术使用的代码_应用技巧

这一种方法适合,访问相对集中在同样内容页面的网站,会自动生成缓存文件(相当于读取静态页面,但会增大文件)。如果访问不集中会造成服务器同时读取文件当机。

注意:系统需要FSO权限、XMLHTTP权限

系统包括两个文件,其实可以合并为一个。之所以分为两个是因为部分杀毒软件会因为里边含有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
%>

复制代码 代码如下:

主包含文件:FileCatch.asp
<!--#include file="FileCatch-Inc.asp"-->
<%
'---- 本文件用于签入原始文件,实现对页面的文件Catch
'---- 1、如果文件请求为POST方式,则取消此功能
'---- 2、文件的请求不能包含系统的识别关键字
'---- 3、作者 何直群 (www.wozhai.com)
Class CatchFile
        Public Overdue,Mark,CFolder,CFile '定义系统参数
        Private ScriptName,ScriptPath,ServerHost '定义服务器/页面参数变量
        Public CatchData        '输出的数据

        Private Sub Class_Initialize        '初始化函数
                '获得服务器及脚本数据
                ScriptName=Request.Servervariables("Script_Name") '识别出当前脚本的虚拟地址
                ScriptPath=GetScriptPath(false)        '识别出脚本的完整GET地址
                ServerHost=Request.Servervariables("Server_Name") '识别出当前服务器的地址

                '初始化系统参数
                Overdue=30        '默认30分钟过期
                Mark="NoCatch"        '无Catch请求参数为 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=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)        '转换编码的函数
                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
                        '如果指定参数不为空,表示请求不可以使用Catch
                                Rev="请求拒绝使用Catch功能"
                                CatchNow=false
                        else
                                CatchNow=GetCatchData(Rev)
                        end if
                end if
        End Function

        Private Function GetCatchData(Rev)        '读取Catch数据
                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)        '如果需要创建Catch,则创建Catch文件,同时设置Catch的数据
                else
                        GetCatchData=ReadCatch(Rev)        '如果不需要创建Catch,则直接读取Catch数据
                End if

                Set FSO=nothing
        End Function

        Private Function GetScriptPath(IsGet)        '创建一个包含所有请求数据的地址
                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

        '创建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="创建发生错误:"&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="读取发生错误:"&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功能,减少数据库的读取。经测试,可以减少90%的服务器负荷。页面访问速度基本与静态页面相当。
'使用方法:将该文件放在网站里,然后在需要引用的文件的“第一行”用include引用即可。

'=======================参数区=============================

DirName="cachenew\" '静态文件保存的目录,结尾应带"\"。无须手动建立,程序会自动建立。
'TimeDelay=10   '更新的时间间隔,单位为分钟,如1440分钟为1天。生成的静态文件在该间隔之后会被删除。
TimeDelay=300
'======================主程序区============================

foxrax=Request("foxrax")
if foxrax="" then
 FileName=Server.URLEncode(GetStr())&".txt"
 FileName=DirName&FileName
 if tesfold(DirName)=false then'如果不存在文件夹则创建
 createfold(Server.MapPath(".")&"\"&DirName)
 end if 

 if ReportFileStatus(Server.MapPath(".")&"\"&FileName)=true then'如果存在生成的静态文件,则直接读取文件
 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

'========================函数区============================

'获取当前页面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,文本数据
    stm.Mode=3 'adModeReadWrite,读取写入,此参数用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,按二进制数据读入
    stm.Mode=3 'adModeReadWrite ,这里只能用3用其他会出错
    stm.Open
    stm.LoadFromFile Server.MapPath(filePath)
    stm.Position=0 '把指针移回起点
    stm.Type=2 '文本数据
    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
磁盘缓存
迅雷磁盘缓存、磁盘缓存、迅雷磁盘缓存设置、内存虚拟成磁盘缓存、磁盘缓存设置,以便于您获取更多的相关知识。

时间: 2024-10-03 16:09:25

asp磁盘缓存技术使用的代码_应用技巧的相关文章

asp磁盘缓存技术使用的代码

这一种方法适合,访问相对集中在同样内容页面的网站,会自动生成缓存文件(相当于读取静态页面,但会增大文件).如果访问不集中会造成服务器同时读取文件当机. 注意:系统需要FSO权限.XMLHTTP权限 系统包括两个文件,其实可以合并为一个.之所以分为两个是因为部分杀毒软件会因为里边含有FSO.XMLHTTP操作而被认为是脚本木马. 调用时,需要在ASP页面的最上边包含主文件,然后在下边写下以下代码 <% Set MyCatch=new CatchFile MyCatch.Overdue=60*5 '

在JScript中使用缓存技术的实际代码_应用技巧

在使用VBScript时,我们可以用Application缓存数组来实现缓存,例: 程序代码: 复制代码 代码如下: Dim rs,arr  rs.Open conn,sql,1,1  arr=rs.GetRows()  Application.Lock()  Application("cache")=arr  Applicatoin.UnLock()  在VBScript里,数组是可以存到Application对象里的,但是如果ASP的语言选择为JScript的话,那么就有些不妙了,

ASP.Net缓存总结及分析 分享_实用技巧

1.页面缓存        要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可.         <%@ OutputCache CacheProfile=" " NoStore="True | False" Duration="#ofseconds" Shared="True | False" Location="Any | Client | Downstream | Server |

asp.net导出EXCEL的功能代码_实用技巧

复制代码 代码如下: //由gridviw导出为Excel public static void ToExcel(System.Web.UI.Control ctl) { HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls"); HttpContext.Current.Response.Charset = "UTF-8

asp 通用修改和增加函数代码_应用技巧

接下来我利用一点空余时间发一个函数里面包含和添加和删除功能.实验的架构可以使用IIS.5WEB服务器ACCESS数据库.这个我其实不用说的很详细了,因为大家都应该知道的.我就直接把函数贴出来.大家只要稍微修改即可使用. 复制代码 代码如下: <% sub AdminEdit() dim Action,rsCheckAdd,rs,sql Action=request.QueryString("Action") if Action="SaveEdit" then

asp.net 操作excel的实现代码_实用技巧

Excel是Microsoft公司的Office套件中的一种软件,他主要用来处理电子表格.Excel以界面友好.处理数据迅速等优点获得广大办公人员的欢迎.所以很多文档就以Excel的形式保存了下来.对于程序设计人员,在程序设计中,我们往往要访问Excel文件来获得数据.但由于Excel文件不是标准数据库,所以用程序语言来访问他就比较困难.  ASP.NET是Microsoft公司极力推荐的一个产品,作为.NET FrameWork框架中的一个重要组成部分,他主要用于Web设计.全新的设计理念.强

ASP 微信公共平台接口实现代码_应用技巧

复制代码 代码如下: <%@Language="VBScript" CodePage="65001"%><%'**********************************************'注意事项'ASP文件需要以UTF-8的格式保存,否则乱码.'以下两行代码是为了通过微信接口验证的.'response.write request("echostr")'response.end'*****************

ASP 三层架构 Convert类实现代码_应用技巧

这个类主要解决在类型转换时,如果直接使用类型转换函数,会因为变量为空或者格式不对而导致程序报错,而这种报错在大多数情况下是允许的.例如要转换一个字符串变量为数字,如果变量为空,则一般需要自动返回0. 另外一个重要功能就是封装变量格式化操作,可以保持整个网站的输出格式统一,例如时间格式,货币格式等等. 日期和货币格式化的时候,极易遇到因空值报错的情况,一般都不得不写个预判断空值的逻辑,再格式化变量. 使用这个类负责类型转换和格式化输出后,就不用操心这些琐碎的细节了,可以让编程的心情得到大大改善啊.

asp.net保存远程图片的代码_实用技巧

注意:并没有实现CSS中的图片采集,且图片的正则还有待完善. 复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using