<?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);