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 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
Jun 17 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
php的debug相关函数用法示例
Jul 11 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
PHP重载基础知识回顾
Sep 10 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编写大型网站问题集
2007/03/06 PHP
一个PHP数组应该有多大的分析
2009/07/30 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
python实现井字棋游戏
2020/03/30 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
世界上最大的二手相机店:KEN
2017/05/17 全球购物
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
车队司机个人自我鉴定
2014/04/17 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
生日寿星公答谢词
2015/09/29 职场文书
导游词之广西漓江
2019/11/02 职场文书