捕捉并保存ASP运行错误的函数代码

时间:2022-09-18 14:27:18

过程名:catch(str) 
使用方法: 

复制代码代码如下:


on error resume next 
'你的代码,如数据库连接 
call catch("显示给用户的提示信息") 


功能:清除IIS的错误提示信息,自定义错误提示返回给用户,并将出错信息保存到txt文件(当然你也可以稍做修改转向自定义页面等) 

代码: 

复制代码代码如下:


<% 
option explicit 
'例一--------------------------- 
'必须和on error resume next一起使用,但在网页没有正式发布之前最好将其注释掉,以免在调试时看不到出错详细信息 
on error resume next 
'i没有定义,会出错,使用catch清除错误并保存到记事本 

call catch("页面无法访问") 
'------------------------------- 
'例二--------------------------- 
function conn() 
'必须和on error resume next一起使用 
on error resume next 
'...........你的连接数据库代码 
call catch("数据库打开错误") 
end function 
'------------------------------- 
sub catch(str) 
if err.number <> 0 then 
dim tmp,path 
'错误日志绝对路径,如"/error_log.txt" 
path = "/table/error_log.txt" 
tmp = tmp & "出错页面:" & geturl & vbcrlf 
tmp = tmp & "错误时间:" & now() & vbcrlf 
tmp = tmp & "来访IP:" & ip & vbcrlf 
tmp = tmp & "提示信息:" & str & vbcrlf 
tmp = tmp & "错误代号:" & err.number & vbcrlf 
tmp = tmp & "错误信息:" & err.description & vbcrlf 
tmp = tmp & "应用程序:" & err.source & vbcrlf & vbcrlf & vbcrlf 
tmp = tmp & file_read(path) 
call file_save(tmp,path,1) 
err.clear() 
die(str) 
end if 
end sub 
'以下为catch所用到的函数-------------------- 
sub echo(str) 
response.write(str) 
end sub 
sub die(str) 
echo(str) : response.end() 
end sub 
function ip() 
ip = request.servervariables("remote_addr") 
end function 
'获取当前URL 
function geturl() 
dim tmp 
if lcase(request.servervariables("https")) = "off" then 
tmp = "http://" 
else 
tmp = "https://" 
end if 
tmp = tmp & request.servervariables("server_name") 
if request.servervariables("server_port") <> 80 then 
tmp = tmp & ":" & request.servervariables("server_port") 
end if 
tmp = tmp & request.servervariables("url") 
if trim(request.querystring) <> "" then 
tmp = tmp & "?" & trim(request.queryString) 
end if 
geturl = tmp 
end function 
'函数:读取文件内容到字符串 
function file_read(path) 
dim tmp : tmp = "false" 
if not file_exists(path) then file_read = tmp : exit function 
dim stream : set stream = server.CreateObject("ADODB.Stream") 
with stream 
.type = 2 '文本类型 
.mode = 3 '读写模式 
.charset = "gb2312" 
.open 
.loadfromfile(server.MapPath(path)) 
tmp = .readtext() 
end with 
stream.close : set stream = nothing 
file_read = tmp 
end function 
'函数:保存字符串到文件 
function file_save(str,path,model) 
if model<>0 and model<>1 then model=1 
if model=0 and file_exists(path) then file_save=true : exit function 
dim stream : set stream = server.CreateObject("ADODB.Stream") 
with stream 
.type = 2 '文本类型 
.charset = "gb2312" 
.open 
.writetext str 
.savetofile(server.MapPath(path)),model+1 
end with 
stream.close : set stream = nothing 
file_save = file_exists(path) 
end function 
'函数:检测文件/文件夹是否存在 
function file_exists(path) 
dim tmp : tmp = false 
dim fso : set fso = server.CreateObject("Scripting.FilesyStemObject") 
if fso.fileexists(server.MapPath(path)) then tmp = true 
if fso.folderexists(server.MapPath(path)) then tmp = true 
set fso = nothing 
file_exists = tmp 
end function 
%>