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采集时被封ip的解决方法
Aug 29 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
thinkPHP自动验证机制详解
Dec 05 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 PHP
Yii 框架控制器创建使用及控制器响应操作示例
Oct 14 PHP
laravel框架语言包拓展实现方法分析
Nov 22 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按单词截取字符串的方法
2015/04/07 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
在Python中执行系统命令的方法示例详解
2017/09/14 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
pycharm中成功运行图片的配置教程
2018/10/28 Python
python实现人像动漫化的示例代码
2020/05/17 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
优秀大学生推荐信范文
2013/11/28 职场文书
大学生怎样进行自我评价
2013/12/07 职场文书
旷课检讨书3000字
2014/02/04 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
幼儿园开学寄语
2014/04/03 职场文书
企业文化标语口号
2014/06/09 职场文书
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server