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中的字符串函数
Nov 24 PHP
php REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
PHP实现自动登入google play下载app report的方法
Sep 23 PHP
php中fsockopen用法实例
Jan 05 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
PHP简单留言本功能实现代码
Jun 09 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
PHP时间函数使用详解
Mar 21 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
COM in PHP (winows only)
2006/10/09 PHP
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
url decode problem 解决方法
2011/12/26 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
js导航菜单(自写)简单大方
2013/03/28 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
Vue实现日历小插件
2019/06/26 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
jQuery编写QQ简易聊天框
2020/08/27 jQuery
[05:24]TI9采访——教练
2019/08/24 DOTA
python 实现文件的递归拷贝实现代码
2012/08/02 Python
详解Python中的各种函数的使用
2015/05/24 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
django 常用orm操作详解
2017/09/13 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
介绍信的写法
2015/01/31 职场文书
经营场所证明范本
2015/06/19 职场文书
如何写好活动总结
2019/06/21 职场文书
《废话连篇——致新手》——chinapizza
2022/04/05 无线电