工作完成,我要在這里說明的是如果你想要作統計的網頁數量非常龐大,那你就得在每一個網頁的一開頭將這個程序含入
(Include),不過我可以告訴你這是值得的,因為這一份流量統計表可以完整紀錄整個月的流量統計,而不僅僅是今天和昨天
而已,我相信你一定很高興聽到我這么說吧!!!因為我也很高興可以讓大家不必藉由一些昂貴的流量統計程序就能做到類似
的效果,其實流量統計的方式有很多種,如果你只想針對某一個網頁作統計,那么友緣故事的流量統計程序算是一個蠻不錯的
小程序,簡單又大方,如果你想對站內所有的網頁作流量統計,但你只想紀錄網頁瀏覽總數,那你可以參考本站做法,使用
Response.Redirect(重新導向的方式來處理),重新導向的方式很簡單,首先你必須在數據庫建立一個索引字段(ID),然后還
有一個字段儲存網頁的超級鏈接地址(URL),再加上一個儲存點選次數的字段Hits,接著利用一個重新導向的小程序
Redirect.asp將參數值傳遞出去Redirect.asp?ID=15,而Redirect.asp會將接收到的ID值到數據庫進行比對,將比對到的資
料列其Hits字段值加一接著再導向到URL字段所儲存的網址,這是一種比較簡單的做法,不過前提是你必須將所有網頁的資料
全部建進數據庫,而今天要介紹的方法并不需要將所有網頁的資料寫入數據庫,你只要將網頁名稱和日期字段建入數據庫即
可。
數據庫表格及字段名稱定義如下:
HITS
網頁 文字
1號 數字
2號 數字
3號 數字
4號 數字
5號 數字
6號 數字
7號 數字
8號 數字
9號 數字
10號 數字
11號 數字
12號 數字
13號 數字
14號 數字
15號 數字
16號 數字
17號 數字
18號 數字
19號 數字
20號 數字
21號 數字
22號 數字
23號 數字
24號 數字
25號 數字
26號 數字
27號 數字
28號 數字
29號 數字
30號 數字
31號 數字
檔案包含有三個檔案,一個是執行流量統計的Hits.asp,一個是紀錄日志文件是否已經寄給
網站管理者的文字驗證檔案Mailed.txt,最后就是紀錄流量統計的日志檔案Hits.Log:程序流程部分如下如所示
我們現在就來看看Hits.asp
Hits.asp
<%'指定數據庫路徑
Dim stats
stats = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/asp/state/stats.mdb")
& ";DefaultDir=" & Server.MapPath("/asp/state") & ";DriverId=25;FILE=MS
Access;MaxBufferSize=512;PageTimeout=5"%>
<html>
<head>
<title>流量統計表</title>
</head>
<body text="#000000" bgcolor="#FFFFFF">
<!-- #INCLUDE FILE="adovbs.inc" -->
<%
Dim todaysDate
'將網頁名稱以Session變量取代
'將目前日期傳給todaysDate變量
session("Page")="1"
todaysDate = day(now())
'********************************************
' 如果今天是1號的話,就將紀錄日志文件是否已經寄給網站
'管理者的文字驗證檔案之內容讀出,并傳給Mailed變量
'********************************************
if todaysDate = "1" then
Dim objFSO, objTextFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Do While Not objTextFile.AtEndOfStream
Mailed = objTextFile.ReadLine
Loop
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
'如果日志文件還沒寄出
If Mailed = "0" then
Dim objRec
Dim objConn
Dim txtSubject
'建立數據庫連結并開啟數據庫
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.Recordset")
objConn.Open stats
MySQL="Select * From Stats"
objRec.Open MySQL, objConn, adOpenKeyset, adLockReadOnly
'呼叫Email子程序,將日志文件內容傳給txtSubject變量
txtSubject = Email(objRec)
' 呼叫LogFile子程序,將日志文件內容寫入日志文件
LogFile(txtSubject)
' 呼叫EmailTo子程序,將日志文件內容寄給網站管理者
EmailTo(txtSubject)
' 呼叫dBaseClear子程序,將數據庫內容全部歸零
dBaseClear()
'**************************************
'Email子程序
'**************************************
Function Email(objRec)
Dim strT
Dim total
Dim fldF
'將總數歸0
total = 0
intFields = objRec.Fields.Count - 1
While not ObjRec.Eof
For Each fld in ObjRec.Fields
If Not fld.Name="ID" Then
'除了ID字段之外,將其它字段名稱、字段值依序列出
'fld.Name(字段名稱),fld.Value(字段值)
'并將月份加在字段名稱和字段值之前然后傳給strt變量
strT = strT & MonthName(month(date())) & " " & fld.Name &_
": " & fld.Value & VbCrLf
'計算總點選次數,并傳給Total變量
total = total + fld.Value
End if
Next
strT = VbCrLf & strT & VbCrLf
objRec.MoveNext
Wend
'將strT變量經過適當的格式化再輸出
strT = strT & VbCrLf & "總點選次數 " & MonthName(month(date())) &_
" " & year(now()) & ": " & total & VbCrLf & VbCrLf
Email = strT
End Function
'***********************************
' LOGFile子程序,將strT變量值寫入日志文件
'***********************************
Function LogFile(txtSubject)
Const ForAppending = 8
Dim strLogFileName
'*********************************************
' 定義日志文件路徑,并以加入的模式開啟文字文件
'*********************************************
strLogFileName = "C:inetpubwwwrootaspstateHits.log"
Dim objLogFileFSO
'建立檔案存取組件
Set objLogFileFSO = CreateObject("Scripting.FileSystemObject")
Dim objLogFileTS
'若日志文件存在則以附加模式開啟
if objLogFileFSO.FileExists(strLogFileName) then
set objLogFileTS = objLogFileFSO.OpenTextFile(strLogFileName, ForAppending)
else
'若日志文件不存在則建立日志文件
set objLogFileTS = objLogFileFSO.CreateTextFile(strLogFileName)
end if
'將strT變量內容寫入日志文件
objLogFileTS.Write txtSubject
Set objLogFileFSO = Nothing
Set objLogFileTS = Nothing
End Function
'********************************************
'EmailTo子程序,將日志文件內容寄給網站管理者
'*********************************************
Function EmailTo(txtSubject)
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ServerAddress = "pcnet.pc-net.com.tw"
'*********************************************************
'*********************************************************
JMail.Sender = "PC-NET服務器"
JMail.Subject = MonthName(month(date())) & " 統計表"
JMail.AddRecipient "[email protected]"
JMail.AddRecipient "[email protected]"
JMail.Body = txtSubject
JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
'************************************
'
'************************************
JMail.Execute
JMail.Close
Set JMail = Nothing
End Function
'************************************
' dBaseClear子程序,流量統計表寄出之后將數據庫歸零
'************************************
Function dBaseClear()
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.RecordSet")
objConn.Open stats
MySQL="Select * From Stats"
objRec.Open MySQL, objConn, adOpenStatic, adLockOptimistic
While Not ObjRec.Eof
'將數據庫第2個字段到最后1個字段值全部歸0
For I = 2 to 32
ObjRec.Fields(I)=0
Next
ObjRec.MoveNext
WEnd
'清除與關閉數據庫對象集合
objRec.Close
objConn.Close
Set objRec = Nothing
Set objConn = Nothing
End Function
'信件寄出之后將Mailed.txt的內容設為1,代表信件已經寄出
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Mailed = "1"
objTextFile.WriteLine Mailed
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
End if
End If
'如果是每個月的第二天,就將Mailed.txt的內容設為0
if todaysDate = "2" then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Mailed = "0"
objTextFile.WriteLine Mailed
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
end if
'如果不是每個月的第一天,就將本網頁當天的計數值加一
'建立數據庫連結并開啟數據庫
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.Recordset")
objConn.Open stats
'找尋數據庫中網頁名稱符合的資料列
MySQL="SELECT * FROM STATS WHERE Page='"&Session("Page")&"'"
objRec.Open MySQL, objConn, adOpenStatic, adLockOptimistic
'將當天點選次數加1
objRec(todaysDate+1).Value = objRec(todaysDate+1).Value + 1
objRec.Update
objRec.Close
objConn.Close
Set objRec = Nothing
Set objConn = Nothing
%>
</body>
</html>
程序部分筆者用了幾個子程序希望大家比較好理解,寄出日志文件的Email組件是采用筆者之前介紹過的Jmail組件,相信大
家都蠻熟悉的,而網頁名稱筆者暫時是以1、2、3來表示,希望這個小程序對大家有所幫助,記得要把他加在每個網頁里面
喔!!用Include的方式也可以。