包含 在线 标签的文章

PHP 在线人数统计程序

突然想给网站搞个在线人数统计(当然,不是我自己的网站,自己的网站在线人数手指头一伸就数出来了),于是想到很早前收集的一个在线人数统计小程序,但是那个在线统计是以IP来算的,如果我们公司那么一大堆人访问不是只算一个么,于是自己写了一个在线人数统计程序,有多少电脑正打开你的网站就有多少人访问,It's Okay!

看代码:

 

PHP代码
  1. <?php   
  2. /*  
  3.     @ PHP 在线人数统计程序  
  4.     Copyright (c) www.vgot.cn by Pader 1:25 2009年1月7日  
  5.     Homepage:http://www.vgot.cn  
  6.     QQ: 270075658  
  7.     How to use it: <script src="online.php"></script>  
  8.     note: 一般独立在线人数统计程序都是统计在线的IP数,而这并不准确  
  9.     例如局域网的访问者,比如公司,学校机房和网吧,虽然内网IP不同,但是外网IP都是一样  
  10.     如果同一个局域网的无论多少人人访问你的网站则只被认为是一个人  
  11.     这个小巧的程序解决了此问题,它以电脑为单为,每台电脑便算一个访问者  
  12.     当然因为使用的是COOKIE,如果你在同一台电脑上使用两种不同核心的浏览器访问那就别当别论了  
  13. */  
  14. $filename = 'online.txt';  //数据文件   
  15. $cookiename = 'VGOTCN_OnLineCount';  //cookie名称   
  16. $onlinetime = 600;  //在线有效时间,单位:秒 (即600等于10分钟)   
  17.   
  18. $online = file($filename);    
  19. $nowtime = time();    
  20. $nowonline = array();   
  21.   
  22. /*  
  23.     @ 得到仍然有效的数据  
  24. */  
  25. foreach($online as $line) {   
  26.     $row = explode('|',$line);   
  27.     $sesstime = trim($row[1]);   
  28.     if(($nowtime - $sesstime) <= $onlinetime) {  //如果仍在有效时间内,则数据继续保存,否则被放弃不再统计   
  29.         $nowonline[$row[0]] = $sesstime;  //获取在线列表到数组,会话ID为键名,最后通信时间为键值   
  30.     }   
  31. }   
  32.   
  33. /*  
  34.     @ 创建访问者通信状态  
  35.         使用cookie通信  
  36.         COOKIE 将在关闭浏览器时失效,但如果不关闭浏览器,此 COOKIE 将一直有效,直到程序设置的在线时间超时  
  37. */  
  38. if(isset($_COOKIE[$cookiename])) {  //如果有COOKIE即并非初次访问则不添加人数并更新通信时间   
  39.     $uid = $_COOKIE[$cookiename];   
  40. else {  //如果没有COOKIE即是初次访问   
  41.     $vid = 0;  //初始化访问者ID   
  42.     do {  //给用户一个新ID   
  43.         $vid++;   
  44.         $uid = 'U'.$vid;   
  45.     } while (array_key_exists($uid,$nowonline));   
  46.     setcookie($cookiename,$uid);   
  47. }   
  48. $nowonline[$uid] = $nowtime;  //更新现在的时间状态   
  49.   
  50. /*  
  51.     @ 统计现在在线人数  
  52. */  
  53. $total_online = count($nowonline);   
  54.   
  55. /*  
  56.     @ 写入数据  
  57. */  
  58. if($fp = @fopen($filename,'w')) {   
  59.     if(flock($fp,LOCK_EX)) {   
  60.         rewind($fp);   
  61.         foreach($nowonline as $fuid => $ftime) {   
  62.             $fline = $fuid.'|'.$ftime."\n";   
  63.             @fputs($fp,$fline);    
  64.         }   
  65.         flock($fp,LOCK_UN);   
  66.         fclose($fp);   
  67.     }   
  68. }   
  69.     echo 'document.write("'.$total_online.'");';    
  70. ?>  

代码里可能插入的时候带了一些空格程序不能正常运行,可以点附件下载。

Pader 2009-1-7 0