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 相关文章推荐
信用卡效验程序
Oct 09 PHP
第七节--类的静态成员
Nov 16 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
php操作memcache缓存方法分享
Jun 03 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
Oct 10 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
Jun 08 PHP
php将xml转化对象的实例详解
Nov 17 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
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
浅说js变量
2011/05/25 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
python样条插值的实现代码
2018/12/17 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
销售人员中英文自荐信
2013/09/22 职场文书
幼儿园园长自我鉴定
2013/10/22 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
酒店管理求职信
2014/06/09 职场文书
个人主要事迹材料
2014/08/26 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
Java对文件的读写操作方法
2022/04/29 Java/Android