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 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
一个取得文件扩展名的函数
Oct 09 PHP
PHP6 mysql连接方式说明
Feb 09 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
PHP常用的排序和查找算法
Aug 06 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 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实现将GB编码转换为UTF8
2006/11/25 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
php多重接口的实现方法
2015/06/20 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
详解vue渲染函数render的使用
2017/12/12 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
python中import学习备忘笔记
2017/01/24 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
django-filter和普通查询的例子
2019/08/12 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
python能做哪些生活有趣的事情
2020/09/09 Python
如何通过python计算圆周率PI
2020/11/11 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
秘书行业自我鉴定范文
2013/12/30 职场文书
春季防火方案
2014/05/10 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
Python制作动态字符画的源码
2021/08/04 Python