php使用Session和文件统计在线人数


Posted in PHP onJuly 04, 2015
<?php 
/* 
@ PHP 在线人数统计程序 
Copyright (c) by Pader 1:25 2009年1月7日 
How to use it: <script src="online.php"></script> 
note: 一般独立在线人数统计程序都是统计在线的IP数,而这并不准确 
例如局域网的访问者,比如公司,学校机房和网吧,虽然内网IP不同,但是外网IP都是一样 
如果同一个局域网的无论多少人人访问你的网站则只被认为是一个人 
这个小巧的程序解决了此问题,它以电脑为单为,每台电脑便算一个访问者 
当然因为使用的是COOKIE,如果你在同一台电脑上使用两种不同核心的浏览器访问那就别当别论了 
*/ 
$filename = 'online.txt'; //数据文件,如果没有新建 
$cookiename = 'VGOTCN_OnLineCount'; //cookie名称 
$onlinetime = 600; //在线有效时间,单位:秒 (即600等于10分钟) 
 
@$online = file($filename); //数据文件,如果没有新建 
$nowtime = time();  
$nowonline = array(); 
 
/* 
@ 得到仍然有效的数据 
*/ 
if(!empty($online)){ 
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);
PHP 相关文章推荐
PHP 简单数组排序实现代码
Aug 05 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
PHP常用正则表达式集锦
Aug 17 PHP
PHP 正则表达式常用函数
Aug 17 PHP
PHP中的事务使用实例
May 26 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
PHP数据库操作三:redis用法分析
Aug 16 PHP
php-msf源码详解
Dec 25 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
Oct 08 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 PHP
PHP执行linux命令6个函数代码实例
Nov 24 PHP
使用XHGui来测试PHP性能的教程
Jul 03 #PHP
编写PHP脚本过滤用户上传的图片
Jul 03 #PHP
在Windows系统下使用PHP生成Word文档的教程
Jul 03 #PHP
深入理解PHP中的Streams工具
Jul 03 #PHP
列举PHP的Yii 2框架的开发优势
Jul 03 #PHP
PHP中异常处理的一些方法整理
Jul 03 #PHP
在PHP程序中使用Rust扩展的方法
Jul 03 #PHP
You might like
ThinkPHP中redirect用法分析
2014/12/05 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
js loading加载效果实现代码
2009/11/24 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
Promise扫盲贴
2019/06/24 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
营销总经理的岗位职责
2013/12/15 职场文书
集体生日活动方案
2014/08/18 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
单独二胎证明
2015/06/24 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
2016年“七一建党节”广播稿
2015/12/18 职场文书