程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php使用Session和文件統計在線人數

php使用Session和文件統計在線人數

編輯:PHP綜合
<?php 
/* 
@ PHP 在線人數統計程序 
Copyright (c) by Pader 1:25 2009年1月7日 
How to use it: <script src="online.php"></script> 
note: 一般獨立在線人數統計程序都是統計在線的IP數,而這並不准確 
例如局域網的訪問者,比如公司,學校機房和網吧,雖然內網IP不同,但是外網IP都是一樣 
如果同一個局域網的無論多少人人訪問你的網站則只被認為是一個人 
這個小巧的程序解決了此問題,它以電腦為單為,每台電腦便算一個訪問者 
當然因為使用的是COOKIE,如果你在同一台電腦上使用兩種不同核心的浏覽器訪問那就別當別論了 
*/ 
$filename = 'online.txt'; //數據文件,如果沒有新建 
$cookiename = 'VGOTCN_OnLineCount'; //cookie名稱 
$onlinetime = 600; //在線有效時間,單位:秒 (即600等於10分鐘) 
 
@$online = file($filename); //數據文件,如果沒有新建 
$nowtime = time();  
$nowonline = array(); 
 
/* 
@ 得到仍然有效的數據 
*/ 
if(!empty($online)){ 
foreach($online as $line) { 
$row = explode('|',$line); 
$sesstime = trim($row[1]); 
if(($nowtime - $sesstime) <= $onlinetime) { //如果仍在有效時間內,則數據繼續保存,否則被放棄不再統計 
$nowonline[$row[0]] = $sesstime; //獲取在線列表到數組,會話ID為鍵名,最後通信時間為鍵值 
} 
} 
} 
/* 
@ 創建訪問者通信狀態 
使用cookie通信 
COOKIE 將在關閉浏覽器時失效,但如果不關閉浏覽器,此 COOKIE 將一直有效,直到程序設置的在線時間超時 
*/ 
if(isset($_COOKIE[$cookiename])) { //如果有COOKIE即並非初次訪問則不添加人數並更新通信時間 
$uid = $_COOKIE[$cookiename]; 
} else { //如果沒有COOKIE即是初次訪問 
$vid = 0; //初始化訪問者ID 
do { //給用戶一個新ID 
$vid++; 
$uid = 'U'.$vid; 
} while (array_key_exists($uid,$nowonline)); 
setcookie($cookiename,$uid); 
} 
$nowonline[$uid] = $nowtime; //更新現在的時間狀態 
 
/* 
@ 統計現在在線人數 
*/ 
$total_online = count($nowonline); 
 
/* 
@ 寫入數據 
*/ 
if($fp = @fopen($filename,'w')) { 
if(flock($fp,LOCK_EX)) { 
rewind($fp); 
foreach($nowonline as $fuid => $ftime) { 
$fline = $fuid.'|'.$ftime."\n"; 
@fputs($fp,$fline);  
} 
flock($fp,LOCK_UN); 
fclose($fp); 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved