PHP學習筆記:php網絡流量統計系統


 說明:代碼來源《PHP和MySQL Web應用開發》一書,還有就是代碼有些是經過修改的,經過我的測驗全部都可以用。

   這里面ip地址顯示的正常的,我電腦是支持 ipv6 的。

 

本示例的數據庫腳本 ~~~ 先執行 set names gbk;   (因為腳本中包含中文)再執行語句:  source d:\test\Vote.sql;

CREATE DATABASE IF NOT EXISTS FluxStat
COLLATE 'gb2312_chinese_ci';

USE FluxStat;
CREATE TABLE IF NOT EXISTS WebInfo (
    Id  INT  AUTO_INCREMENT  PRIMARY KEY,
    WebName VARCHAR(50), 
    WebUrl VARCHAR(200), 
    StartTime DATETIME,
    nTotalNum INT,
    nDayMax INT);

INSERT INTO WebInfo (WebName, WebUrl, StartTime, nTotalNum, nDayMax) 
VALUES ('流量統計系統首頁', 'http://localhost/test3/FluxStat/index.php', '2015-07-07 0:0:0', 0, 0);

CREATE TABLE IF NOT EXISTS Visitors (
    Id  INT  AUTO_INCREMENT  PRIMARY KEY,
    vTime DATETIME,
    vIP VARCHAR(50),
    vOS VARCHAR(50), 
    vExp VARCHAR(50),
    vRef VARCHAR(50)
);

CREATE TABLE IF NOT EXISTS FluxStat  (
    Id INT AUTO_INCREMENT  PRIMARY KEY,
    D1 INT,
    D2 INT,
    D3 INT,
    D4 INT,
    D5 INT,
    D6 INT,
    D7 INT,
    D8 INT,
    D9 INT,
    D10 INT,
    D11 INT,
    D12 INT,
    D13 INT,
    D14 INT,
    D15 INT,
    D16 INT,
    D17 INT,
    D18 INT,
    D19 INT,
    D20 INT,
    D21 INT,
    D22 INT,
    D23 INT,
    D24 INT,
    D25 INT,
    D26 INT,
    D27 INT,
    D28 INT,
    D29 INT,
    D30 INT,
    D31 INT,
    MTotalNum INT
);

style.CSS  CSS樣式代碼

BODY
{
    FONT-FAMILY: 宋體;
    FONT-SIZE: 9pt
}
TABLE
{
    FONT-SIZE: 9pt
}
TR
{
    FONT-SIZE: 9pt
}
TD
{
    FONT-SIZE: 9pt
}
SELECT
{
    FONT-SIZE: 9pt
}
TEXTAREA
{
    FONT-SIZE: 9pt
}
INPUT
{
   FONT-SIZE: 9pt
}
A:link
{
    COLOR: blue;
    TEXT-DECORATION: none
}
A:visited
{
    COLOR: blue;
    TEXT-DECORATION: none
}
A:hover
{
    TEXT-DECORATION: underline
}
View Code

Class文件包含3個文件 FluxStat.php(FluxStat類) 、 Visitors.php(Visitors類) 以及 WebInfo.php(WebInfo類)

FluxStat.php  存放網站每天的訪問數量

 

<?PHP
    class FluxStat
    {
        var $conn;

        public $Id;        //年月編號
        public $D1;        //每月第1日訪問量
        public $D2;        //每月第2日訪問量
        public $D3;        //每月第3日訪問量
        public $D4;        //每月第4日訪問量
        public $D5;        //每月第5日訪問量
        public $D6;        //每月第6日訪問量
        public $D7;        //每月第7日訪問量
        public $D8;        //每月第8日訪問量
        public $D9;        //每月第9日訪問量
        public $D10;    //每月第10日訪問量
        public $D11;    //每月第11日訪問量
        public $D12;    //每月第12日訪問量
        public $D13;    //每月第13日訪問量
        public $D14;    //每月第14日訪問量
        public $D15;    //每月第15日訪問量
        public $D16;    //每月第16日訪問量
        public $D17;    //每月第17日訪問量
        public $D18;    //每月第18日訪問量
        public $D19;    //每月第19日訪問量
        public $D20;    //每月第20日訪問量
        public $D21;    //每月第21日訪問量
        public $D22;    //每月第22日訪問量
        public $D23;    //每月第23日訪問量
        public $D24;    //每月第24日訪問量
        public $D25;    //每月第25日訪問量
        public $D26;    //每月第26日訪問量
        public $D27;    //每月第27日訪問量
        public $D28;    //每月第28日訪問量
        public $D29;    //每月第29日訪問量
        public $D30;    //每月第30日訪問量
        public $D31;    //每月第31日訪問量
        public $MTotalNum;    //每月總訪問量
        
                
        function __construct() {
            // 鏈接到數據庫book,連接對象為$conn
            $this->conn = mysqli_connect("localhost", "root", "123456", "FluxStat"); 
            mysqli_query($this->conn, "SET NAMES utf-8");
        }
        
        function __destruct() {
            // 關閉$conn中保存的數據庫連接
            mysqli_close($this->conn);
        }

        // 插入新記錄
        function insert()
        {
            $sql = "INSERT INTO FluxStat VALUES ('" . $this->Id . "', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)";
            $this->conn->query($sql);
        }
        
        // 將指定列的值加1.參數$col表示指定的列名, 參數$id表示指定的記錄編號
        function updateCount($col, $id)
        {
            $sql = "UPDATE FluxStat SET " . $col . "=" . $col . "+1, MTotalNum=MTotalNum+1 WHERE Id='" . $id . "'";
            $this->conn->query($sql);
        }

        // 判斷hiding記錄編號是否存在
        function exists($id)
        {
            $sql = "SELECT * FROM FluxStat WHERE Id='" . $id . "'";
            $result = $this->conn->query($sql);
            if($row = $result->fetch_row()) 
                return true;
            else
                return false;
        }

        // 獲取某天的訪問量。參數$col表示指定的列名, 參數$id表示指定的記錄編號
        function GetDn($col, $id)
        {
            $sql = "SELECT ". $col . " FROM FluxStat WHERE Id='" . $id . "'";
            $result = $this->conn->query($sql);
            if($row = $result->fetch_row()) 
                return (int)$row[0];
            else
                return 0;
        }

        // 獲取表FluxStat中保存的年份列表
        function GetYears()
        {
            $sql = "Select Distinct Left(id,4) AS sYear From FluxStat";
            $result = $this->conn->query($sql);
            return $result;
        }         

        // 裝入指定月份的統計數據
        function load_FluxStat($id)
        {
            $sql = "SELECT * FROM FluxStat WHERE Id='" . $id . "'";
            $result = $this->conn->query($sql);
            Return $result;
        }

        // 裝入指定年份的統計數據
        function load_FluxStat_byYear($year)
        {
            $sql = "SELECT * FROM FluxStat WHERE Left(Id,4)='" . $year . "'";
            $result = $this->conn->query($sql);
            Return $result;
        }
    }
?>
View Code

 

 

 

Visitors.php  存放最近的20位訪問者信息

 

<?PHP
    class Visitors
    {
        var $conn;

        public $Id;            //訪問者編號,主鍵,自動加1
        public $vTime;        //訪問時間
        public $vIP;        //IP地址
        public $vOS;        //操作系統
        public $vExp;        //瀏覽器
        public $vRef;        //來源
        
                
        function __construct() {    
            // 鏈接到數據庫book,連接對象為$conn        
            $this->conn = mysqli_connect("localhost", "root", "123456", "FluxStat"); 
            mysqli_query($this->conn, "SET NAMES utf-8");
        }
        
        function __destruct() {            
            // 關閉$conn中保存的數據庫連接
            mysqli_close($this->conn);
        }

        // 插入新記錄
        function insert()
        {
            $sql = "INSERT INTO Visitors (vTime, vIP, vOS, vExp, vRef) VALUES('" . $this->vTime . "', '" . $this->vIP . "', '" . $this->vOS . "','" . $this->vExp . "','" . $this->vRef . "')";
            $this->conn->query($sql);
        }
        
        //獲取表中的記錄數量
        function GetRecordCount()
        {            
            $sql = "SELECT COUNT(*) FROM visitors";
            $result = $this->conn->query($sql);
            if($row = $result->fetch_row())  
                Return (int)$row[0];
            else
                Return 0;        
        }
        
        //刪除編號最小的記錄數量
        function deleteMinRecord()
        {
            $sql = "DELETE FROM Visitors WHERE ID IN (SELECT Max(ID) FROM Visitors)";
            $this->conn->query($sql);
        }
        
        //獲取最近的20個訪問者記錄,返回結果集
        function get_latest20()
        {
            $sql = "SELECT * FROM Visitors ORDER BY vTime DESC LIMIT 0,20";
            $results = $this->conn->query($sql);
            return $results;
        }
    }
?>
View Code

 

 

 

WebInfo.php  存放進行流量統計的網站的基本信息

<?PHP
    class WebInfo
    {
        var $conn;

        public $Id;                //網站ID號,主鍵,自動增加1
        public $WebName;        //網站名稱
        public $WebURL;            //網站
        public $StartTime;        //開始統計時間
        public $nTotalNum;        //總訪問量
        public $nDayMax;        //最高日訪問量
                
        function __construct() {
            // 鏈接到數據庫book,連接對象為$conn
            $this->conn = mysqli_connect("localhost", "root", "123456", "FluxStat"); 
            mysqli_query($this->conn, "SET NAMES utf-8");
        }
        
        function __destruct() {
            // 關閉$conn中保存的數據庫連接
            mysqli_close($this->conn);
        }

        // 插入新記錄
        function insert()
        {
            $sql = "INSERT INTO WebInfo (WebName, WebURL, StartTime, nTotalNum, nDayMax) VALUES('" . $this->WebName . "', '" . $this->WebURL . "', '" .  $this->StartTime . "', 0, 0)";
            $this->conn->query($sql);
        }        
        
        // 刪除記錄,參數$Id表示記錄編號
        function delete($Id)
        {
            $sql = "DELETE FROM WebInfo WHERE Id=" . $Id;
            $this->conn->query($sql);
        }            
        
        //獲取日最高訪問量
        function GetDayMax()
        {
            $sql = "SELECT nDayMax FROM WebInfo WHERE Id=1";
            $result = $this->conn->query($sql);
            if($row = $result->fetch_row())
                return (int)$row[0];
            else
                return 0;
        }    

        //更新日最高訪問量
        function updateDayMax($dayMax, $id)
        {
            $sql = "UPDATE WebInfo SET nDayMax=" . $dayMax . " WHERE Id=" . $id;
            $this->conn->query($sql);
        }

        //將總訪問量增加1
        function increaseTotalNum()
        {
            $sql = "Update WebInfo Set nTotalNum=nTotalNum+1 Where id=1";
            $this->conn->query($sql);
        }
        
        //獲取網站的基本信息
        function getWebInfo()
        {
            $sql = "Select * From WebInfo Where id=1";
            $results = $this->conn->query($sql);
            if($row = $results->fetch_row()) {
                $this->Id = (int)$row[0];
                $this->WebName = $row[1];        
                $this->WebURL = $row[2];        
                $this->StartTime = $row[3];        
                $this->nTotalNum = (int)$row[4];
                $this->nDayMax = (int)$row[5];                
            }
        }

        //計算並返回兩個日期之差,單位為天
        function datediff($date1, $date2)
        {
            $sql = "SELECT datediff('" . $date1 . "', '" . $date2 . "')";
            $results = $this->conn->query($sql);
            if($row = $results->fetch_row()) 
                return $row[0];
            else
                return 0;
        }
    }
?>
View Code

 

Function.php  函數庫,存放本項目的大部分函數

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″> 
<?PHP

error_reporting(0); 
function GetCurrentTime()  {
    //以yyyy-mm-dd hh:MM:ss 返回當前的系統時間
  date_default_timezone_set('Asia/Chongqing'); //系統時間差8小時問題
  $cur_time = getdate();
  return $cur_time['year'] . "-" . $cur_time['mon'] . "-" . $cur_time['mday']  . " " . $cur_time['hours'] . ":" . $cur_time['minutes'] . ":" . $cur_time['seconds'];
  //程序調用getdate()函數獲取當前系統時間,結果保存在$cur_time數組中,然后將$cur_time數組中的元素構建成指定格式的字符串,作為函數的返回值
}

/*
function GetExplore()  {
    //返回客戶端用戶使用的瀏覽器
    $explore = "";
    $Agent = $_SERVER["HTTP_USER_AGENT"];
    //echo($Agent);
    //使用$_SERVER["HTTP_USER_AGENT"]返回訪問當前網頁的客戶端信息。
    //例如:win7,IE9.0 ————> Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
    // 找到第1個;的位置
    $pos = strpos($Agent, ';');
    if($pos < 0)
        return "";
        
    $explore = substr($Agent, $pos+1, strlen($Agent)-$pos);    // 截取第1個分號后面的字符串
    // 找到第2個;的位置
    $pos = strpos($explore, ';');
    // 第1個分號和第2個分號之間是瀏覽器信息    
    $explore = substr($explore, 0, $pos);
    return $explore;
}
//書中所給的代碼有誤,就是判斷瀏覽器出錯,因為在谷歌中$Agent = $_SERVER["HTTP_USER_AGENT"];返回的是Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36
*/
/*
IE mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)
360 mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0; 360se)
搜狗 mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; trident/4.0; se 2.x metasr 1.0)
世界之窗 mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; trident/4.0)
遨游 mozilla/5.0 (windows nt 5.1) applewebkit/535.12 (khtml, like gecko) maxthon/3.3.4.4000 chrome/18.0.966.0 safari/535.12
火狐 mozilla/5.0 (windows nt 5.1; rv:8.0.1) gecko/20100101 firefox/8.0.1
谷歌 mozilla/5.0 (windows nt 5.1) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.26 safari/535.11
opera opera/9.80 (windows nt 5.1; u; edition next; zh-cn) presto/2.10.255 version/12.00
*/

//通過修改過的,其他幾個就先不試了,具體的其他瀏覽器返回信息在上面
function GetExplore()  {
    $Agent = $_SERVER["HTTP_USER_AGENT"];
    $browseragent="";   //瀏覽器
$browserversion=""; //瀏覽器的版本
if (preg_match('/MSIE ([0-9].[0-9]{1,2})/i',$Agent,$version)) {
 $browserversion=$version[1];
 $browseragent="Internet Explorer";
} else if (preg_match( '/Opera\/([0-9]{1,2}.[0-9]{1,2})/i',$Agent,$version)) {
 $browserversion=$version[1];
 $browseragent="Opera";
} else if (preg_match( '/Firefox\/([0-9.]{1,5})/i',$Agent,$version)) {
 $browserversion=$version[1];
 $browseragent="Firefox";
}else if (preg_match( '/Chrome\/([0-9.]{1,3})/i',$Agent,$version)) {
 $browserversion=$version[1];
 $browseragent="Chrome";
}
else if (preg_match( '/Safari\/([0-9.]{1,3})/i',$Agent,$version)) {
 $browseragent="Safari";
 $browserversion="";
}
else {
$browserversion="";
$browseragent="Unknown";
}
return $browseragent." ".$browserversion;
}


function GetOSInfo()  {
    // 在獲取客戶端的瀏覽器信息時,包含操作系統信息
    $os="";
    $Agent = $_SERVER["HTTP_USER_AGENT"];
    if (preg_match('/win/i',$Agent) && strpos($Agent, '95')) {
        $os="Windows 95";
    }
    elseif (preg_match('/win 9x/i',$Agent) && strpos($Agent, '4.90')) {
        $os="Windows ME";
    }
    elseif (preg_match('/win/i',$Agent) && ereg('98',$Agent)) {
        $os="Windows 98";    
    }
    elseif (preg_match('/win/i',$Agent) && preg_match('/nt 5\.0/i',$Agent)) { 
        $os="Windows 2000"; 
    }
    elseif (preg_match('/win/i',$Agent) && preg_match('/nt 5\.2/i',$Agent)) { 
        $os="Windows 2003"; 
    }
    elseif (preg_match('/win/i',$Agent) && preg_match('/nt 5\.1/i',$Agent)) { 
        $os="Windows XP"; 
    } 
    elseif (preg_match('/win/i',$Agent) && preg_match('/nt 6\.1/i',$Agent)) { 
        $os="Windows 7"; 
    }     
    elseif (preg_match('/win/i',$Agent) && preg_match('/32/i',$Agent)) {
        $os="Windows 32";
    }
    elseif (preg_match('/win/i',$Agent) && preg_match('/nt/i',$Agent)) {
        $os="Windows NT";
    }    
    elseif (preg_match('/linux/i',$Agent)) {
        $os="Linux";
    }
    elseif (preg_match('/unix/i',$Agent)) {
        $os="Unix";
    }
    elseif (preg_match('/sun/i',$Agent) && preg_match('/os/',$Agent)) {
        $os="SunOS";
    }
    elseif (preg_match('/ibm/i',$Agent) && preg_match('/os/',$Agent)) {
        $os="IBM OS/2";
    }
    elseif (preg_match('/Mac/',$Agent) && preg_match('/PC/',$Agent)) {
        $os="Macintosh";
    }
    elseif (preg_match('/PowerPC/i',$Agent)) {
        $os="PowerPC";
    }
    elseif (preg_match('/AIX/',$Agent)) {
        $os="AIX";
    }
    elseif (preg_match('/HPUX/',$Agent)) {
        $os="HPUX";
    }
    elseif (preg_match('/NetBSD/',$Agent)) {
        $os="NetBSD";
    }
    elseif (preg_match('/BSD/',$Agent)) {
        $os="BSD";
    }
    elseif (ereg('OSF1',$Agent)) {
        $os="OSF1";
    }
    elseif (ereg('IRIX',$Agent)) {
        $os="IRIX";
    }
    elseif (preg_match('/FreeBSD/',$Agent)) {
        $os="FreeBSD";
    }
    if ($os=='') 
        $os = "Unknown";
    return $os;
    //eregi()函數用於實現不區分大小寫的正則表達式匹配,語法為 int eregi(string $pattern,string $string,[,array $regs])
    //只是在php5.3之后不再支持eregi(), 了改為preg_match()
}

?>
View Code

 

Index.php    訪問者界面代碼

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″> 
<?PHP
    //獲取客戶端信息代碼
    include('function.php');
    include('Class\Visitors.php');
    $objVisitor = new Visitors();
    // 收集需要統計的信息
    $theurl = $_SERVER['PHP_SELF'];        // 當前的URL
    $objVisitor->vIP = $_SERVER['REMOTE_ADDR'];        // IP地址
    $objVisitor->vOS = GetOSInfo();                    // 自定義函數,獲取客戶端的操作系統
    // 獲取瀏覽器信息
    $objVisitor->vExp = GetExplore();//$arr->parent;
    $objVisitor->vRef = $_SERVER['HTTP_REFERER'];    // 訪問前的網址
    if($objVisitor->vRef == "")
      $objVisitor->vRef = "直接輸入或書簽導入";
    //echo($_SERVER["HTTP_USER_AGENT"]);
    // 獲取當前時間
    $objVisitor->vTime = GetCurrentTime();
?>
<table border=1 width="400">
<tr><td>您訪問的時間</td><td><?PHP echo($objVisitor->vTime); ?></td></tr>
<tr><td>您的IP地址</td><td><?PHP echo($objVisitor->vIP); ?></td></tr>
<tr><td>操作系統</td><td><?PHP echo($objVisitor->vOS); ?></td></tr>
<tr><td>瀏覽器</td><td><?PHP echo($objVisitor->vExp); ?></td></tr>
<tr><td>來自</td><td><?PHP echo($objVisitor->vRef); ?>&nbsp;</td></tr>
<tr><td>當前頁面</td><td><?PHP echo($theurl); ?></td></tr>
</table>
<P align=center><a href="main.php">查看網站流量統計信息</a></P>
<?PHP
    //添加訪問者信息到表Visitors中
    $nCount = $objVisitor->GetRecordCount();
    // 保存數據到數據庫,數據庫中只保存最近訪問的20條信息
    if($nCount >= 20)
        $objVisitor->deleteMinRecord();    // 如果記錄數大於20,則刪除最小的值
    // 保存數據
    $objVisitor->insert();
    //-----------------------------------
    //更新當天訪問量和當月訪問量
    date_default_timezone_set('Asia/Chongqing'); //系統時間差8小時問題    
    $cur_time = getdate();
    $id = $cur_time['year'] . $cur_time['mon'];    // 表FluxStat中的Id字段值
    $col = "D" . $cur_time['mday'];
    // 判斷當前月的記錄是否存在
    include('Class\FluxStat.php');
    $objFlux = new FluxStat();
    if(!$objFlux->exists($id))  {
        // 沒有則插入記錄
        $objFlux->Id = $id;
        $objFlux->insert();
    }
    else {
        $objFlux->updateCount($col, $id);
    }
    
    // ---------------------------------
    // 比較日訪問量最大值
    $nToday = $objFlux->GetDn($col, $id);
    include('Class\WebInfo.php');
    $objWeb = new WebInfo();
    $nDayMaxNum = $objWeb->GetDayMax();        // 獲取WebInfo中的日訪問量最大值
    // 如果當日訪問量大於日訪問量,則更新記錄
    if($nToday > $nDayMaxNum)
        $objWeb->updateDayMax($nToday, 1); 
    //---------------------------------
    // 更新總訪問量
    $objWeb->increaseTotalNum(); 
?>
View Code

 

ToIndex.html  跳轉到主頁Index.php的界面

<html>
<body>
<p><a href="Index.php">轉向主頁</a></p>
</body>
</html>
View Code

 

main.php    網站信息界面代碼

<head>
  <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″> 
<title>網站流量統計系統</title>
<link rel="stylesheet" href="style.css">
</head>
<!--顯示網站信息界面-->
<table width="50%" align=center>
<tr><td align="center"><td align="center">網站基本信息</td>
<td align="center"><a href="Visitors.php">最近訪問者信息</a></td>
<td align="center"><a href="FluxMonth.php">按月訪問量統計</a></td>
<td align="center"><a href="FluxYear.php">按年訪問量統計</a></td></tr>
</table>
<br>
<?PHP
  //獲取數據庫中相應的數據
  date_default_timezone_set('Asia/Chongqing'); //系統時間差8小時問題    
  $date = getdate();
  $now = $date['year'] . "-" . $date['mon'] . "-" . $date['mday'];        // 獲取當前系統時間
  $nTotalNum = 0;
  $nDayMaxNum = 0;
  $sWebURL = "";
  $sWebName = "";
  include('Class\WebInfo.php');
  $objWebinfo = new WebInfo();    
  $objWebinfo->getWebInfo();    // 獲取網站信息
  if($objWebinfo->Id == 0)
    exit("請在數據庫中輸入網站基本信息");

  // 統計天數 = 目前時間-統計開始時間

  $nStatDays = $objWebinfo->datediff($now, $objWebinfo->StartTime);    // 利用mysql計算時間差
  if($nStatDays==0)
    $nStatDayNum = 1;
  // 平均日訪問量 = 總訪問量/訪問天數
  if($nStatDays<=0)
    $nDayAve = $nTotalNum;
  else
    $nDayAve = (int)($nTotalNum/$nStatDays);
  // 得到當天訪問量
  $nToDayNum=0;
  $sYear = $date['year'];
  $sMonth = $date['mon'];
  $sId = $sYear . $sMonth;
  $sDay = $date['mday'];
  $sCol = "D" . $sDay;    // 獲取今天對應FluxStat表中的字段名
  include('Class\FluxStat.php');
  $objFlux = new FluxStat();
  $nToDayNum = $objFlux->GetDn($sCol, $sId);
?>
<table width="70%" border=1  cellpadding=0 cellspacing=0 align="center">
  <tbody> 
    <tr> 
      <td> 
        <table border=1 cellpadding=3 cellspacing=0 width="100%" bgcolor="#FFFF99" height="266">
          <tbody> 
          <tr> 
            <td colspan=4 align="center" bgcolor="#C4E2F0" height="16">
            網 站 綜 合 統 計 信 息 
            </td>
          </tr>
          <tr bgcolor="#FFFFFF"> 
            <td align=left colspan=2 height="16">網站名稱</td>
            <td align=right colspan=2 height="16"><?PHP echo($objWebinfo->WebName); ?></td>
          </tr>
          <tr bgcolor="#E4E4E4"> 
            <td align=left colspan=2 height="16" >網站網址</td>
            <td align=right colspan=2 height="16"><a href="<%=sWebURL%>" target="_blank"><?PHP echo($objWebinfo->WebURL); ?></a></td>
          </tr>
          <tr bgcolor="#FFFFFF"> 
            <td align=left colspan=2 height="16">總統計天數</td>
            <td align=right colspan=2 height="16"><?PHP echo($nStatDays); ?></td>
          </tr>
          <tr bgcolor="#E4E4E4"> 
            <td align=left colspan=2 height="16">開始統計日期</td>
            <td align=right colspan=2 height="16"><?PHP echo($objWebinfo->StartTime); ?></td>
          </tr>
          <tr bgcolor="#FFFFFF"> 
            <td align=left colspan=2 height="16">總訪問量</td>
            <td align=right colspan=2 height="16"><?PHP echo($nTotalNum); ?></td>
          </tr>
          <tr bgcolor="#E4E4E4"> 
            <td align=left colspan=2 height="16">平均日訪量</td>
            <td align=right colspan=2 height="16"><?PHP echo($nDayAve); ?></td>
          </tr>
          <tr bgcolor="#FFFFFF"> 
            <td align=left colspan=2 height="15">今日訪問量</td>
            <td align=right colspan=2 height="15"><?PHP echo($nToDayNum); ?></td>
          </tr>
         <tr bgcolor="#E4E4E4"> 
            <td align=left colspan=2 height="16">最高日訪量</td>
            <td align=right colspan=2 height="16"><?PHP echo($objWebinfo->nDayMax); ?></td>
          </tr>
          <tr align="right"> 
            <td colspan=4 bgcolor="#C4E2F0" height="19"> 
              <p> </p>
            </td>
          </tr>
          </tbody> 
        </table>
      </td>
    </tr>
  </tbody> 
</table>
View Code

 

Visitors.php  最近訪問者界面代碼

<html><!--最近訪問者界面代碼-->
<head><title>最近20位訪問者信息</title>
  <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″> 
<link rel="stylesheet" href="style.css"></head>
<body>
<table width="50%" align=center>
<td align="center"><a href="main.php">網站基本信息</a></td>
<td align="center">最近訪問者信息</td>
<td align="center"><a href="FluxMonth.php">按月訪問量統計</a></td>
<td align="center"><a href="FluxYear.php">按年訪問量統計</a></td></tr>
</table>
<?PHP
  include('Class\Visitors.php');
  $objVisitor = new Visitors();
  $results = $objVisitor->get_latest20();
?>
<table width="70%" border=1 cellpadding=0 cellspacing=0 bgcolor="#FFFF99" align="center">
  <tbody> 
          <tr> 
            <td align="center" height="30" bgcolor="#C4E2F0">最 近 20 位 訪 問 者 信 息</td>                                     
          </tr>    <tr> 
      <td height="33"> 
        <table border=0 cellpadding=3 cellspacing=0 width="100%" bgcolor="#FFFFFF">
          <tbody> 

          <tr bgcolor="#E4E4E4"> 
            <td align=left width="20%">時間</td>
            <td align=left width="14%">IP地址</td>
            <td align=left width="16%">操作系統</td>
            <td align=left width="20%">瀏覽器</td>
            <td align=left width="30%">鏈接頁面</td>
          </tr>
<?PHP
  // 依次處理結果集中的所有訪問者信息
  while($row = $results->fetch_row())  {
    $sReferer=$row[5];
?>
          <tr bgcolor="#FFFFFF"> 
            <td align=left><?PHP echo($row[1]); ?></td>
            <td align=left><?PHP echo($row[2]); ?></td>
            <td align=left><?PHP echo($row[3]); ?></td>
            <td align=left><?PHP echo($row[4]); ?></td>
            <td align=left>
      <?PHP 
        if($sReferer=="直接輸入或書簽導入")
              echo($sReferer);
        else {
            echo("<a href='" . $sReferer . "' title=" . $sReferer . " target='_blank'>" . substr($sReferer,0, 36) . "</a>");
        }
      ?>  
      </td>
          </tr>
<?PHP 
  }
?>
          </tbody> 
        </table>
      </td>
    </tr>
    <tr align="right"> 
            <td bgcolor="#C4E2F0" height="30"> 
              <p> </p>
            </td>
          </tr>
  </tbody> 
</table>
</body>
</html>
View Code

 

FluxMonth.php  按月統計界面代碼

<html><!--按月統計界面代碼-->
<head><title>按月份統計</title>
    <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″> 
<link rel="stylesheet" href="style.css"></head>
<Script Language="JavaScript">
  function MonthSubmit() {
    var sYear,strURL,sMonth;
    sYear = document.form1.year.value;
    sMonth= document.form1.mn.value;
    strURL = "FluxMonth.php?year=" + sYear + "&month=" + sMonth;
    form1.action = strURL;
    form1.submit();
  }
</Script><body>
<form name="form1" action="FluxMonth.php" method="post">
<table width="50%" align=center>
<tr>
<td align="center"><a href="main.php">網站基本信息</a></td>
<td align="center"><a href="Visitors.php">最近訪問者信息</a></td>
<td align="center">按月訪問量統計</td>
<td align="center"><a href="FluxYear.php">按年訪問量統計</a></td>
</tr>
</table>
<?PHP
    // 取得統計月份
error_reporting(0); 
date_default_timezone_set('PRC');
    $sYear = $_GET["year"];
    $sMonth = $_GET["month"];
    $date = getdate();
    if($sYear=="")
       $sYear = $date['year'];
    if($sMonth=="")
       $sMonth= $date['mon'];
    $sId = $sYear . $sMonth;
?>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--加這些是為了讓界面好看,這是空格字符代碼-->
選擇統計年份:<select name="year">
<?PHP
    //得到數據庫中有記錄的年份
    include('Class\FluxStat.php');
    $objFlux = new FluxStat();
    $results = $objFlux->GetYears();
    //將年份顯示在組合框中
    while($row = $results->fetch_row())  {
        $rsYear = $row[0];
        if($sYear==$rsYear)
            echo("<option value=" . $row[0] . " selected>" . $row[0] . "年</option>");
        else
            echo("<option value=" . $row[0] . ">" . $row[0] . "年</option>");
    }
?>
</select>
選擇統計月份:<select name="mn" onChange="MonthSubmit()">
<?PHP
    for($i=1; $i<13; $i++)  {
        if($sMonth==$i)    // 如果是當前月,則選中
            echo("<option value=". $i . " selected>" . $i . "月</option>");
        else
            echo("<option value=" . $i . ">" . $i . "月</option>");
    }
?>
</select>
</form>
<table width="70%" border=1 bgcolor=#FFFF99 cellpadding=0 cellspacing=0 align="center">
  <tbody> 
     <tr> 
        <td align="center" bgcolor="#C4E2F0" height="30"><?PHP echo($sYear); ?> 年 <?PHP echo($sMonth); ?> 月 訪 問 統 計 (總訪問量:<?PHP echo($nMonthTotalNum); ?>人次)</td>
    </tr>
    <tr> 
      <td> 
        <table border=0 cellpadding=3 cellspacing=0 width="100%" bgcolor="#FFFFFF">
          <tbody> 

          <tr bgcolor="#CCCCCC"> 
            <td align=left width="20%">日期</td>
            <td align=left width="20%">訪問人數</td>
            <td align=left width="60%">百分比</td>
          </tr>
          <?PHP 
    // 定義數組值為0,nDArr(30)表示每天訪問量
    // nPArr(30)表示每天的百分比,nBArr(30)表示圖形的長度
    for($i=0; $i<=30; $i++)  {
        $nDArr[$i] = 0;
        $nPArr[$i] = 0;
        $nBArr[$i] = 0;
    }
    // 取得此月份的訪問量信息
    $results = $objFlux->load_FluxStat($sId);
    $i=0;
    if($row = $results->fetch_row())  {
        for($i=0; $i<=30; $i++) {
            $nDArr[$i] = $row[$i+1];
            $nMonthTotalNum = (int)$row[32];
        }
    }
    if($nMonthTotalNum>0) {
        for($i=0; $i<=30; $i++)  {
            $nPArr[$i] = ($nDArr[$i]/$nMonthTotalNum*10000)/100 . "%";
            $nBArr[$i] = $nDArr[$i]/$nMonthTotalNum*200;
        }
    }
            for($i=0; $i<=30; $i++) { ?> 
          <tr bgcolor="#FFFFFF"> 
            <td align=left><?PHP echo($sMonth); ?>月<?PHP echo($i+1); ?>日</td>
            <td align=left><?PHP echo($nDArr[$i]); ?></td>
            <td align=left><img src="images/bar.gif" width="<?PHP echo($nBArr[$i]); ?> "height="12"><?PHP echo($nPArr[$i]); ?></td>
          </tr>
          <?PHP } /* end of for */ ?> 
          </tbody> 
        </table>
      </td>
    </tr>
     <tr><td bgcolor="#C4E2F0" height="30"> </td>
     </tr>
  </tbody> 
</table>
</body>
</html>
View Code

 

FluxYear.php   按年統計界面代碼

<!--按年統計界面代碼-->
<?PHP
error_reporting(0); 
date_default_timezone_set('PRC');
    // 取得統計類型
    $sYear = $_GET["year"];
    $date = getdate();    // 獲取當前時間
    if($sYear=="")
        $sYear = $date['year'];
?>
<html>
<head><title>按年度統計</title>
    <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″> 
<link rel="stylesheet" href="style.css"></head>
<Script Language="JavaScript">
  function YearSubmit() {
    var sYear,strURL;
    sYear = document.form1.year.value;
    strURL = "FluxYear.php?year=" + sYear;
    form1.action = strURL;
    form1.submit();
  }
</Script>
<body>
<form name="form1" action="FluxYear.php" method="post">
<table width="50%" align=center cellspacing="0" cellpadding="0" style="margin-top: 0; margin-bottom: 0">
<td align="center"><a href="main.php">網站基本信息</a></td>
<td align="center"><a href="Visitors.php">最近訪問者信息</a></td>
<td align="center"><a href="FluxMonth.php">按月訪問量統計</a></td>
<td align="center">按年訪問量統計</td>
</tr>
</table><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--加這些是為了讓界面好看,這是空格字符代碼-->
選擇統計年份:<select name="year" onChange="YearSubmit()">
<?PHP
    //得到數據庫中有記錄的年份
    include('Class\FluxStat.php');
    $objFlux = new FluxStat();
    $results = $objFlux->GetYears();
    //將年份顯示在組合框中
    while($row = $results->fetch_row())  {
        $rsYear = $row[0];
        if($sYear==$rsYear)
            echo("<option value=" . $row[0] . " selected>" . $row[0] . "年</option>");
        else
            echo("<option value=" . $row[0] . ">" . $row[0] . "年</option>");
    }
?>
</select>
<?PHP
    // 定義數組值為0,nMArr(12)表示每月訪問量
    // nPArr(12)表示每天的百分比,nBArr(12)表示圖形的長度
    for($i=0; $i<=30; $i++)  {
        $nMArr[$i] = 0;
        $nPArr[$i] = 0;
        $nBArr[$i] = 0;
    }
    // 取得此月份的訪問量信息
    $results = $objFlux->load_FluxStat_byYear($sYear);
    $i=0;
    if($row = $results->fetch_row())  {
        $sId = substr($row[0], 4, strlen($row[0])-4);    // 獲取Id字段后面的月份字符串
        $nMArr[(int)$sId - 1] = (int)$row[32];    // 保存各月份的訪問數據    
        $nYearTotal = $nYearTotal + (int)$row[32];
    }
    if($nYearTotal>0) {
        for($i=0; $i<=11; $i++)  {
            $nPArr[$i] = ($nMArr[$i]/$nYearTotal*10000)/100 . "%";
            $nBArr[$i] = $nMArr[$i]/$nYearTotal*200;
        }
    }
?>
<table width="70%" border=1 bgcolor=#FFFF99 cellpadding=0 cellspacing=0 align="center">
  <tbody> 
    <tr> 
      <td align="center" bgcolor="#C4E2F0" height="30"><?PHP echo($sYear); ?> 年 訪 問 統 計 (總訪問量:<?PHP echo($nYearTotal); ?>人次)</td>
    </tr>
    <tr> 
      <td> 
        <table border=0 cellpadding=3 cellspacing=0 width="100%" bgcolor="#FFFFFF">
          <tbody> 
          <tr bgcolor="#CCCCCC"> 
            <td align=left width="20%">月份</td>
            <td align=left width="20%">訪問人數</td>
            <td align=left width="60%">百分比</td>
          </tr>
          <?PHP for($i=0; $i<12; $i++) { ?> 
          <tr bgcolor="#FFFFFF"> 
            <td align=left><?PHP echo($sYear); ?>年<?PHP echo($i+1); ?>月</td>
            <td align=left><?PHP echo($nMArr[$i]); ?></td>
            <td align=left><img src="images/bar.gif" width="<?PHP echo($nBArr[$i]); ?> "height="12"><?PHP echo($nPArr[$i]); ?></td>
          </tr>
          <?PHP } /* end of for */ ?> 
          </tbody> 
        </table>
      </td>
    </tr>
    <tr height="30"><td bgcolor="#C4E2F0">  </td>
    </tr>    
  </tbody> 
</table>
</form>
</body>
</html>
View Code

 


 

 

截圖:

訪問者界面

 


 

 

網站信息界面

 


 

 

最近訪問者界面

 



 


 

 

按月統計界面

 


 

 

按年統計界面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM