当前位置:首页 > 技术文档 > 正文内容

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

admin11年前 (2016-01-13)技术文档1688
<?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);
     }


分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:https://www.yuyunhe.cn/index.php/post/127.html

分享给朋友:

“php使用Session和文件统计在线人数” 的相关文章

php 获取当前网址

function get_url() {     $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER...

php获取从百度搜索进入网站的关键词

<?php    function search_word_from() {     $referer = isset($_SERVER['HTTP_REFERER'])?...

php检查用户名是否符合规定

<?php   /**  * 检查用户名是否符合规定 (两个字符以上,只能有中文,字母,数字,下划线的)  *  * @param STRING $username 要检查的用户名...

php二维数组转换为一维数组的几种方法

在开发过程中,我们经常需要将二维数组转为一维数组,个人总结了2种方法,分享给大家如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'...

PHP数组和Json之间的转换

        之所以要用到Json,很多时候是因为使用ajax对象时,程序与JS函数之间的数据交互。因为JS不认识PHP中的数组,PHP也不认识JS中的数组或对象。Json很好的解决了这个问题。Json简介  ...

php取整函数ceil,floor,round,intval函数的区别

开发过程中,遇到数据处理取整的时候,你会用哪个呢,小涛来介绍一下:PHP取整函数有ceil,floor,round,intval,下面详细介绍一下:1、ceil — 进一法取整说明float ceil ( float $value )返回不小于 ...     ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。