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 相关文章推荐
php中的时间显示
Jan 18 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
Oct 03 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
PHP类的封装与继承详解
Sep 29 PHP
PHP编写RESTful接口
Feb 23 PHP
PHP中串行化用法示例
Nov 16 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
php+iframe 实现上传文件功能示例
Mar 04 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
PHP下常用正则表达式整理
2010/10/26 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
php实现webservice实例
2014/11/06 PHP
php模拟post提交数据的方法
2015/02/12 PHP
微信红包随机生成算法php版
2016/07/21 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
PHP7新增函数
2021/03/09 PHP
js select常用操作控制代码
2010/03/16 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
详解自动生成博客目录案例
2016/12/09 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
Python高效编程技巧
2013/01/07 Python
Python简单日志处理类分享
2015/02/14 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
Python常用断言函数实例汇总
2020/11/30 Python
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
会计电算化应届生求职信
2013/11/03 职场文书
班级体育活动总结
2014/07/05 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技