下面是根據wrox的professional asp 3.0建立的網站錯誤檢查機制,使用了之后,你可以找到自己很多的錯誤,節省大量的代碼測試時間,為什么不用呢! 首先建立表:
CREATE TABLE [dbo].[tSiteErrors] ( [kErrKey] [int] IDENTITY (1, 1) NOT NULL , [dDatetime] [datetime] NOT NULL , [ErrorType] [varchar] (255) NOT NULL , [TargetUrl] [varchar] (255) NULL , [ErrorInfo] [varchar] (255) NULL ) ON [PRIMARY] GO 一、檢查記錄網站的錯誤鏈接: 在網站的目錄中建立/siteerror/naverror.asp ________________________________________________
<%@LANGUAGE="VBScript"%> <%Response.Status = "404 Not Found" %> <!--這里是數據庫連接字符串的位置--> <!--#include file="../include/connect.asp"-->
<html> <head> <title>無法找到網頁</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta name="robots" content="noindex"> <style type="text/css"> <!-- td {font-size: 9pt} a{color:#000000;text-decoration:none;} A:link {COLOR: #000000; TEXT-DECORATION: none} A:visited {COLOR: #000000; TEXT-DECORATION: none} A:active {COLOR: #000000; TEXT-DECORATION: none} A:hover {COLOR: #0C78D1; TEXT-DECORATION: underline} --> </style> </head> <body bgcolor="#FFFFFF" text="#000000" topmargin="0"> <table width="100%" border="1" cellspacing="0" cellpadding="0" height="95%" bordercolor="#000000" align="center"> <tr> <td bgcolor="#FFFFFF"> <h2><b><font color="#993399"> 無法找到網頁</font></b></h2> <hr> <b><font color="#999999"> 您正在搜索的網頁可能已經刪除、更名或暫時不可用。</font></b> <% 'On Error Resume Next strTarget = Request.ServerVariables("QUERY_STRING") strReferer = Request.ServerVariables("HTTP_REFERER")
intSemiColon = InStr(strTarget, ";") 'get the original target If (intSemiColon > 0) And (intSemiColon < Len(strTarget)) Then strTarget = Mid(strTarget, intSemiColon + 1) If Len(strTarget) > 254 Then strTarget = Left(strTarget, 254) End If
If Len(strReferer) > 255 Then strReferer = Left(strReferer, 255)
strInform = "<font style=""COLOR:000000; FONT: 9pt/11pt 宋體"">請通知包含該錯誤鏈接的網站管理員。</font>" strTyping = "<font style=""COLOR:000000; FONT: 9pt/11pt 宋體"">如果您在“地址”欄中鍵入了網頁地址,請檢查其拼寫是否正確。或者:</font>" strRecord = "<font style=""COLOR:000000; FONT: 9pt/11pt 宋體"">這個錯誤已經被記錄,將盡快得到處理。</a>"
Response.Write "<p>無法找到的網頁地址為: " & strTarget & "<P>" If Len(strReferer) > 0 Then'came from a link on another page Response.Write "<font style=""COLOR:000000; FONT: 9pt/11pt 宋體"">下列網頁中發現了鏈接錯誤: " & strReferer _ & " 。</font><BR>" Set oConn = Server.CreateObject("ADODB.Connection") 'to store the details oConn.Open dsn strsql="exec sp_errorrecorder 'broken link','" & strtarget & "','"&strReferer&"'" oConn.Execute strSQL Rem 注意這里 If Err.Number = 0 And InStr(strReferer, "你的域名 例如163.com") > 0 Then Response.Write strRecord'came from a page on our site Else Response.Write strInform'came from a page on another site End If Else Response.Write strTyping'they just typed it wrong into their browser End If %> <!--這里的連接是你的域名--> <p> <a href="http://你的域名"><font color="#993399">打開主頁</font></a>,尋找指向所需信息的鏈接。 </p> <p> 單擊<a href="javascript:history.back(1)"><font color="#0033CC">后退</font></a>按鈕嘗試其他鏈接。</p> <hr> <p> <a href="http://你的域名"><font color="#993399">你的網站</font></a>制作,意見和建議請聯系<a href="你的郵件"><font color="#0033CC">你的郵件</font></a> </p> <p> </p> <p> </p> </td> </tr> <tr> <td height="5" bgcolor="#000000"></td> </tr>
</body> </html>
二、檢查記錄網站的代碼錯誤: 在網站的目錄中建立/siteerror/asperror.asp
<%@Language="vbscript"%> <% Response.Status="500 Internal Error"%> <!--#include file=../include/connect.asp--> <html> <head> <meta name="robots" content="noindex"> <title>服務器內部錯誤</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <style type="text/css"> <!-- td {font-size: 9pt} a{color:#000000;text-decoration:none;} A:link {COLOR: #000000; TEXT-DECORATION: none} A:visited {COLOR: #000000; TEXT-DECORATION: none} A:active {COLOR: #000000; TEXT-DECORATION: none} A:hover {COLOR: #0C78D1; TEXT-DECORATION: underline} --> </style> </head>
<body bgcolor="#FFFFFF" text="#000000" topmargin="0"> <% response.flush On error resume next set objAspError=Server.GetLastError() strErrNumber=CStr(objAspError.Number) strASPCode=objAspError.aspcode strErrDescription=objAspError.Description strASpdescription=objAspError.aspdescription strcategory=objAspError.category strfilename=objAspError.file strlinenum=objAspError.line strcolnum=objAspError.column if isnumeric(strcolnum) then lngcolnum=clng(strcolnum) else lngcolnum=0 end if strsourcecode=objasperror.source
set objasperror=nothing
if len(strfilename) then strtarget=strfilename else strtarget="**File name not available **" end if
if len(straspcode) then strInfo="'" & straspcode & "'" else strinfo="Error" end if
if len(strCategory) then strInfo=strinfo & " in " & strcategory & ".<br>" end if
strInfo=strinfo & "Code: " & strErrNumber & "(0x" & hex(strErrnumber) & ") " & strerrdescription & ".<br>" if len(straspdescription) then strinfo=strinfo&"Asp reports: '" & strAspDescription & "'.<br>" end if
if strlinenum>"0" then strinfo=strinfo & "Line " & strLinenum if lngcolnum>0 then strinfo=strinfo & ". column " & lngcolnum if len(strsourcecode) then strinfo=strinfo & " " & strSourcecode end if end if end if
if len(strTarget) >255 then strtarget=left(strtarget,255) if len(strinfo)>255 then strinfo = left(strinfo,255) strinfo=replace(strinfo,"'","''") set oconn=server.createobject("adodb.connection") oconn.open dsn strsql="insert into tsiteerrors(errortype,targeturl,errorinfo) values ('asp error','" & strtarget & "','" & strinfo & "')" strsql="exec sp_errorrecorder 'asp error','" & strtarget & "','"&strinfo&"'" oconn.execute strsql oconn.close set oconn=nothing %> <table width="100%" border="1" cellspacing="0" cellpadding="0" height="95%" bordercolor="#000000" align="center"> <tr> <td bgcolor="#FFFFFF"> <h2><b><font color="#993399"> 服務器內部錯誤</font></b></h2> <hr> <b><font color="#999999"> 您瀏覽的頁面出現了服務器內部錯誤,暫時無法打開,這個問題已經被系統記錄,我們將立即解決該問題。</font></b> <p> 單擊<a href="javascript:history.back(1)"><font color="#0033CC">后退</font></a>按鈕嘗試其他鏈接。</p> <hr> <p> <a href="http://你的域名"><font color="#993399">你的網站</font></a>制作,意見和建議請聯系<a href="mailto:你的郵件"><font color="#0033CC">你的郵件</font></a> </p> <p> </p> <p> </p> </td> </tr> <tr> <td height="5" bgcolor="#000000"></td> </tr>
</body> </html>
三、建立檢查錯誤的頁面: /siteerror/manage_error.asp
<%@LANGUAGE="VBScript"%> <!-- #include virtual="/include/connect.asp" --> <% Server.ScriptTimeOut = 900 Response.Expires = 0 %>
<HTML> <HEAD> <META NAME="robots" CONTENT="noindex,nofollow"> <TITLE>Web-Developer Site Administration</TITLE> <STYLE TYPE="text/css"> BODY {font-family:"Arial"; font-size:12; font-weight:normal} .intro {font-family:"Arial"; font-size:14; font-weight:bold} TD {font-family:"Arial"; font-size:12; font-weight:normal} TH {font-family:"Arial"; font-size:12; font-weight:bold; text-align:left} H1 {font-family:"Arial"; font-size:24; color:darkgray} </STYLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> <H1>網站錯誤檢查</H1> <HR> <SPAN CLASS=intro>管理網站的錯誤</SPAN><P>
<% On Error Resume Next
'*********************************************** '-- open database connection '*********************************************** Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open dsn
'************************************************ '-- delete all items from table '************************************************ If Len(Request.Form("DeleteAll")) Then strSQL = "DELETE FROM tSiteErrors" oConn.Execute(strSQL) If Err.Number = 0 Then Response.Write "已經刪除所有錯誤<BR>" End If
If Len(Request.Form("DeleteChecked")) Then '************************************************ '-- delete ticked items from table '************************************************ For Each chkBox In Request.Form If Left(chkBox, 1) = "X" Then strTargetURL = Mid(chkBox,2) strSQL = "DELETE FROM tSiteErrors WHERE TargetURL='" & strTargetURL & "'" oConn.Execute(strSQL) If Err.Number = 0 Then Response.Write "Deleted errors for target: <B>" & strTargetURL & "</B><BR>" End If Next '************************************************ End If
'************************************************ '-- display list of errors '************************************************ %> <P>Click on a link to view the source or target page. Once the error has been fixed,<BR> tick that entry and click the <B>Delete Selected Errors</B> button.<P> <FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME")%>" METHOD="POST"> <% strSQL="SELECT DISTINCT dDateTime, ErrorType, TargetURL, ErrorInfo FROM tSiteErrors ORDER BY dDateTime DESC" Set oRs = oConn.Execute(strSQL) If (oRs.EOF) Or (Err.Number > 0) Then Response.Write "<B>Sorry, the database cannot be accessed.</B></BODY></HTML>" Response.End End If
'-- loop through the error records intWinNumber = 0 'to create different target window for each link Do While Not oRs.EOF If oRs("ErrorType") = "Broken Link" Then '-- display broken link details %> The page <A HREF="<% = oRs("ErrorInfo") %>" TARGET="new_err_win<% = intWinNumber %>"><% = oRs("ErrorInfo") %></A> contains a broken link.<BR> Target is <A HREF="<% = oRs("TargetURL") %>" TARGET="new_err_win<% = intWinNumber + 1 %>"><% = oRs("TargetURL") %></A><BR> Date/Time: <% = oRs("dDateTime") %> <% Else '-- display script error details %> The page <A HREF="<% = oRs("TargetURL") %>" TARGET="new_err_win<% = intWinNumber %>"><% = oRs("TargetURL") %></A> produced an ASP error .<BR> <% = Server.HTMLEncode(oRs("ErrorInfo")) %><BR> Date/Time: <% = oRs("dDateTime") %> <% End If %> <INPUT TYPE="CHECKBOX" NAME="X<% = Server.HTMLEncode(oRs("TargetURL")) %>">Delete?<P> <% intWinNumber = intWinNumber + 2 oRs.MoveNext Loop Set oRs = Nothing Set oConn = Nothing %> <HR> <INPUT TYPE="SUBMIT" NAME="DeleteChecked" VALUE="Delete Selected Errors"> <INPUT TYPE="SUBMIT" NAME="DeleteAll" VALUE="Delete All Errors"> </FORM> </BODY> </HTML>
四、在INTERNET服務管理器中設置自定義錯誤:
在internet服務管理器中選擇屬性中的[自定義錯誤信息],編輯404[錯誤連接]的屬性,[消息類型]改為URL,URL改成/siteerror/naverror.asp,編輯500[內部錯誤]的屬性,[消息類型]改為URL,URL改為/siteerror/asperror.asp,然后確定。
五、現在你就可以在http://127.0.0.1/siteerror/manage_error.asp中查看你的錯誤的詳細資料了,呵呵,這樣我們就可以一眼看到我們常犯的低級錯誤,而一舉把他們消滅,你的網站就會顯得“干凈多了”。
|