標籤:
作業:網站統計
1、將使用者的訪問資訊記錄到檔案中,獨佔一行,記錄IP地址
1 <?php2 //網站統計3 header(‘Content-type:text/html;charset=utf-8‘);4 5 //擷取使用者資訊6 $ip = $_SERVER[‘REMOTE_ADDR‘];7 8 //寫入檔案(追加)9 file_put_contents(‘record.text‘,$ip."\r\n",FILE_APPEND);
2、所有資訊都是通過檔案中記錄的內容來計算的,讀取整個檔案,一行代表訪問一次,使用file函數讀取。
1 //讀取資料 ,以行為單位2 $info = file(‘record.text‘);
3、總的訪問次數等於總行數,就是讀取的數組的總記錄數。
1 //求出網站的總訪問量2 $visits = count($info);
4、求出當前用的訪問次數,目前使用者的IP在數組中出現的次數
1 //求出目前使用者(IP)出現的次數2 $ip_visits = 0;3 foreach($info as $each_ip)4 { //比較5 if($each_ip == $ip)6 $ip_visits++;7 }
5、總共有多少個使用者訪問過,遍曆當前所有的訪問使用者資訊,另外使用一個數組儲存。如果當前IP在數組中存在,那麼不加入,否則加入。最後統計新數組即可。
1 foreach($info as $each_ip) 2 { 3 //統計當前數組中擁有的的獨立IP數 4 if(!in_array($each_ip,$unique_ips)) 5 $unique_ips[] = $each_ip; 6 7 //比較:從檔案中讀出的是一行,用trim去掉分行符號空格 8 if(trim($each_ip) == $ip) 9 $ip_visits++;10 11 //統計$unique_ips中的元素個數:就是獨立ip數,總使用者12 $users = count($unique_ips);13 }
6、求出目前使用者是第幾位訪問訪問者,只要判斷當前IP在獨立使用者數組中出現的位置即可。
下面是整個作業的代碼:
1 <?php 2 //網站統計 3 header(‘Content-type:text/html;charset=utf-8‘); 4 //擷取使用者資訊 5 $ip = $_SERVER[‘REMOTE_ADDR‘]; 6 //寫入檔案(追加) 7 file_put_contents(‘record.text‘,$ip."\r\n",FILE_APPEND); 8 //讀取資料 ,以行為單位 9 $info = file(‘record.text‘);10 //求出網站的總訪問量11 $visits = count($info);12 //求出目前使用者(IP)出現的次數13 $ip_visits = 0;14 $unique_ips = array();15 foreach($info as $each_ip)16 {17 //統計當前數組中擁有的的獨立IP數18 if(!in_array($each_ip,$unique_ips))19 { //講當前新的使用者加入到獨立的ip數組中20 $unique_ips[] = $each_ip;21 //判斷當前新加的IP($each_ip)是否是目前使用者的IP22 if($ip == trim($each_ip)) $user_visit = count($unique_ips);23 24 }25 26 //比較:從檔案中讀出的是一行,用trim去掉分行符號空格27 if(trim($each_ip) == $ip)28 $ip_visits++;29 30 //統計$unique_ips中的元素個數:就是獨立ip數,總使用者31 $users = count($unique_ips);32 }33 //需求_輸出34 echo "歡迎訪問,你是第{$user_visit}個使用者,當前網站一共有{$users}位使用者,35 當前網頁一共被訪問了{$visits}次,你當前是第{$ip_visits}位訪問";36 ?>
本作業所涉及的幾個PHP函數總結:
1、$_SERVER[‘REMOTE_ADDR‘]
$_SERVER 是一個包含了諸如頭資訊(header)、路徑(path)、以及指令碼位置(script locations)等等資訊的數組。這個數組中的項目由 Web 服務器建立。
‘REMOTE_ADDR‘ 瀏覽當前頁面的使用者的 IP 位址。
2、 file_put_contents— 將一個字串寫入檔案
1 int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
和依次調用 fopen(),fwrite() 以及 fclose() 功能一樣。
參數
-
filename
-
要被寫入資料的檔案名稱。
-
data
-
要寫入的資料。類型可以是 string,array 或者是 stream 資源(如上面所說的那樣)。
如果 data 指定為 stream 資源,這裡 stream 中所儲存的快取資料將被寫入到指定檔案中,這種用法就相似於使用 stream_copy_to_stream() 函數。
參數 data 可以是數組(但不能為多維陣列),這就相當於file_put_contents($filename, join(‘‘, $array))。
-
flags
-
flags 的值可以是 以下 flag 使用 OR (|) 運算子進行的組合。
context
一個 context 資源。
MYSQL基礎筆記(五)- 練習作業:網站統計練習