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
PHP4和PHP5共存于一系统
Nov 17 PHP
php 生成WML页面方法详解
Aug 09 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
php array_walk() 数组函数
Jul 12 PHP
php命令行用法入门实例教程
Oct 27 PHP
PHP模板解析类实例
Jul 09 PHP
php函数连续调用实例分析
Jul 30 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 PHP
PHP内存溢出优化代码详解
Feb 26 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
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
canvas绘制多边形
2017/02/24 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
js实现动态时钟
2020/03/12 Javascript
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
python中return的返回和执行实例
2019/12/24 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
应届生求职信写作技巧
2013/10/24 职场文书
联谊活动总结
2014/08/28 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
蜗居观后感
2015/06/11 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
解决Redis启动警告问题
2022/02/24 Redis
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS