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 相关文章推荐
一个简单计数器的源代码
Oct 09 PHP
PHP配置文件中最常用四个ini函数
Mar 19 PHP
两个强悍的php 图像处理类1
Jun 15 PHP
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
php-app开发接口加密详解
Apr 18 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
详解php命令注入攻击
Apr 06 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
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
用原生js做单页应用
2017/01/17 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
2020/06/05 Python
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
职业生涯规划书怎么写?
2014/09/14 职场文书
2015年科室工作总结
2015/04/10 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
React列表栏及购物车组件使用详解
2021/06/28 Javascript
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB