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 相关文章推荐
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
php中的登陆login
Jan 18 PHP
php中取得文件的后缀名?
Feb 20 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
PHP中unset,array_splice删除数组中元素的区别
Jul 28 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
php实现过滤UBB代码的类
Mar 12 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
php将图片文件转换成二进制输出的方法
Jun 10 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
WordPress伪静态规则设置代码实例
Dec 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学习笔记之二
2011/01/17 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
sails框架的学习指南
2014/12/22 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
详解Python中for循环的使用
2015/04/14 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
python3爬虫怎样构建请求header
2018/12/23 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
Python类中self参数用法详解
2020/02/13 Python
教师实习自我鉴定
2013/12/14 职场文书
企业年度评优方案
2014/06/02 职场文书
2014年度党员自我评议
2014/09/13 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
情人节活动总结范文
2015/02/05 职场文书
Django程序的优化技巧
2021/04/29 Python
常用的Python代码调试工具总结
2021/06/23 Python