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

  过程名:catch(str)

  使用方法:

  

复制代码 代码如下:

  on error resume next

  '你的代码,如数据库连接

  call catch("显示给用户的提示信息")

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

  代码:

  

复制代码 代码如下:

  <%

  option explicit

  '例一---------------------------

  '必须和on error resume next一起使用,但在网页没有正式发布之前最好将其注释掉,以免在调试时看不到出错详细信息

  on error resume next

  'i没有定义,会出错,使用catch清除错误并保存到记事本

  i

  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

  %>