php精确的统计在线人数的方法


Posted in PHP onOctober 21, 2015

这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读。

<?php 
$filename='online.txt';//数据文件 
$cookiename='VGOTCN_OnLineCount';//cookie名称 
$onlinetime=600;//在线有效时间,单位:秒 (即600等于10分钟) 
 
$online=file($filename); 
//PHP file() 函数把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false 
$nowtime=$_SERVER['REQUEST_TIME']; 
$nowonline=array(); 
//得到仍然有效的数据 
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); 
  } 
} 
echo 'document.write("'.$total_online.'");';

希望本文所述对大家学习php程序设计有所帮助。

PHP 相关文章推荐
PHP4在Windows2000下的安装
Oct 09 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
php数据库连接时容易出错的特殊符号问题
Sep 01 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
基于PHP实现生成随机水印图片
Dec 09 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 PHP
为你总结一些php信息函数
Oct 21 #PHP
深入理解PHP变量的值类型和引用类型
Oct 21 #PHP
为你总结一些php系统类函数
Oct 21 #PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 #PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 #PHP
php获取汉字拼音首字母的方法
Oct 21 #PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 #PHP
You might like
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
德生PL330测评
2021/03/02 无线电
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
对python的文件内注释 help注释方法
2018/05/23 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
仓库组长岗位职责
2014/01/29 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
诚信考试标语
2014/06/24 职场文书
个人工作表现自我评价
2015/03/06 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
出生证明格式
2015/06/15 职场文书
小学生教师节广播稿
2015/08/19 职场文书
银行服务理念口号
2015/12/25 职场文书
四年级语文教学反思
2016/03/03 职场文书