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 相关文章推荐
smarty静态实验表明,网络上是错的~呵呵
Nov 25 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
php内核解析:PHP中的哈希表
Jan 30 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
试用php中oci8扩展
Jun 18 PHP
php 多文件上传的实现实例
Oct 23 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 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连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
php中session退出登陆问题
2014/02/27 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
PHP反射基础知识回顾
2020/09/10 PHP
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
简单介绍django提供的加密算法
2019/12/18 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
python中reload重载实例用法
2020/12/15 Python
Python用SSH连接到网络设备
2021/02/18 Python
应届毕业生自我评价分享
2013/12/15 职场文书
陈欧广告词
2014/03/14 职场文书
房产代理公证处委托书
2014/04/04 职场文书
本科毕业生自荐信
2014/06/02 职场文书
宣传工作经验材料
2014/06/02 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
素质教育学习心得体会
2016/01/19 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
Python实现简单的猜单词
2021/06/15 Python