PHP实现统计在线人数功能示例


Posted in PHP onOctober 15, 2016

本文实例讲述了PHP实现统计在线人数的方法。分享给大家供大家参考,具体如下:

我记得ASP里面统计在线人数用application 这个对象就可以了。PHP怎么设计?

PHP对session对象的封装的很好,根据HTTP协议,每个范围网站的访客都可以生成一个唯一的标识符

echo session_id();
//6ed364143f076d136f404ed93c034201<br />

这个就是统计在线人数的关键所在,只有有这个session_id 也就可以区分访问的人了。因为每一个人都不同。
接下来,是怎么把session变量里面的值存到数据库里面去,这里有将介绍另一个函数

bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable$destroy , callable $gc )
//callable 可随时支取的,请求即付的,随时可偿还的
// open(string $savePath, string $sessionName) 打开连接
//close() 关闭连接
//read(string $sessionId) 对出数据
//write(string $sessionId, string $data) //写入数据
//destroy($sessionId) //删除数据
//gc($lifetime) //垃圾回收函数

注意,上面有几个函数是有参数传入的,你只要表明有传送传入就是的。PHP在执行代码的时候会自动读取

session中对于的参数

接下来就是完成上面五个函数和一个主函数就可以了

session_set_save_handler(
   array("session","open"),
   array("session","close"),
   array("session","read"),
   array("session","write"),
   array("session","destroy"),
   array("session","gc")
);

主函数就这样完成了,但为什么要用array(“session”,"方法")来调用这些方法,我真心搞不懂

(基本懂了:凡是将对象的方法作为参数传递都需要使用这种形式:array(对象, "方法名"))

接下来就是每个函数的编写

//链接数据的open
function open($path,$sessname) {
  $db = mysql_connect("localhost","root","123456","test");
  mysql_select_db("test",$db);
  mysql_query("SET NAMES UTF8");
  return true;
}

关闭数据可以链接的close

function close(){
$db = mysql_connect("localhost","root","123456","test");
mysql_close($db);
return true;
}

关键函数要开始了,显示读取函数read(),主要,read()函数是有值传进去的,传入的是session_id

function read($sid){
  $sql = "select data from session where sid='{$sid}' and card='".self::$card."'";
  $query = mysql_query($sql) or die(mysql_error());
  $row = mysql_fetch_array($query);
  $row>0?$row["data"]:" ";
}

第二个是写入函数,如果数据库里面存在的数据,只要更新时间就可以了,新数据写入

function write($sid,$data)
{
   $sql = "select sid from session where sid='{$sid}' and card='".self::$card."'";
   $query = mysql_query($sql) or die(mysql_error());
   $mtime = time();
   $num = mysql_num_rows($query);
   if($num){
    $sql = "UPDATE session SET data='{$data}', mtime ='{$mtime}'";
   }else{
    $sql = "INSERT INTO session (sid,data,mtime,ip,card) VALUES('{$sid}','{$data}','".time()."','{$_SERVER['REMOTE_ADDR']}','".self::$card."')";
   }
   mysql_query($sql);
   return true;
}

接下来就是体现PHP回收机制的函数了,两个函数都有参数传入。

function destroy($sid){
  $sql = "DELETE FROM session WHERE sid='{$sid}'";
  mysql_query($sql) or die(mysql_error());
  return true;
}
function gc($max_time){
  $max_time = 600;
  $sql = "DELETE FROM session WHERE `mtime`<'".(time()-$max_time)."'";
  mysql_query($sql) or die(mysql_error());
  return true;
}

好了,五个函数都完成了,再就是session表中间读出session的记录条数了。就能准确的统计出正在访问页面的人数。

10分钟没有操作的用户记录将被清空

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
PHP实现长文章分页实例代码(附源码)
Feb 03 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
php利用递归实现删除文件目录的方法
Sep 23 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
关于PHP定时发送服务的解决办法
Apr 23 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
Laravel validate error处理,ajax,json示例
Oct 25 PHP
如何用PHP websocket实现网页实时聊天
May 26 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 #PHP
PHP实现导出excel数据的类库用法示例
Oct 15 #PHP
PHP数组操作简单案例分析
Oct 15 #PHP
PHP链表操作简单示例
Oct 15 #PHP
PHP在线打包下载功能示例
Oct 15 #PHP
PHP文件上传处理案例分析
Oct 15 #PHP
PHP小偷程序的设计与实现方法详解
Oct 15 #PHP
You might like
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
JavaScript OOP面向对象介绍
2010/12/02 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
动态创建类实例代码
2009/10/07 Python
python保存数据到本地文件的方法
2018/06/23 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
python3 logging日志封装实例
2020/04/08 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
摄影实习自我鉴定
2013/09/20 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
学雷锋宣传标语
2014/06/25 职场文书
国王的演讲观后感
2015/06/03 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js