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+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
PHP实现MVC开发得最简单的方法――模型
Apr 10 PHP
php $_ENV为空的原因分析
Jun 01 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 PHP
thinkphp3.0 模板中函数的使用
Nov 13 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 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中trim()函数简单使用指南
2015/04/16 PHP
php实现中文转数字
2016/02/18 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
网页自动跳转代码收集
2009/09/27 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
python的常见命令注入威胁
2013/02/18 Python
Python深入学习之内存管理
2014/08/31 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
详解python中的 is 操作符
2017/12/26 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
抽象类和接口的区别
2012/09/19 面试题
中软国际Java程序员笔试题
2014/07/19 面试题
2016年师德学习心得体会
2016/01/12 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
解析Redis Cluster原理
2021/06/21 Redis
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript