<?php
class Guest
{
/******************************************
函数:UpdateDB()
功能:更新访问用户的数据库
参数:none
备注:none
******************************************/  
function UpdateDB()
{
$time=time();
$activetime=ACTIVETIME;
$query="update yugioh_guest set guestactive=0 where ($time-guesttime)>$activetime";//更新在线用户
DBquery($query);
$query="select guestid from yugioh_guest where guestip='{$_SERVER['REMOTE_ADDR']}' and guestactive=1 order by guestid desc limit 1";//判断当前IP是否active
$result=DBquery($query);
if (mysql_num_rows($result)==0){
$query="insert into yugioh_guest (guestip,guesttime) values ('{$_SERVER['REMOTE_ADDR']}',$time)";//如不是活动的IP,则插入新的
}else{
$row=mysql_fetch_array($result);
$query="update yugioh_guest set guesttime='$time' where guestid='{$row['guestid']}'";//如是活动的IP,则更新活动时间
}
DBquery($query);
}

/******************************************
函数:获得在线用户数
功能:
参数:none
备注:none
******************************************/  
function GetOnlineGuest()
{
$query="select COUNT(*) from yugioh_guest where guestactive=1";
$result=DBquery($query);
$row=mysql_fetch_array($result);
return $row[0];
}

/******************************************
函数:GetGuestedNum($time)
功能:获得在某个时间段中
参数:$time 目前时间与所要统计时间的最后一秒的时间间隔..$offset 时间偏移量
备注:none
******************************************/  
function GetGuestedNum($time,$offset)
{
$now=time();
$query="select COUNT(*) from yugioh_guest where guesttime<=$now-$time and guesttime>=$now-$time-$offset";
$result=DBquery($query);
$row=mysql_fetch_array($result);
return $row[0];
}
}
?>

解决方案 »

  1.   

    进入页面时记录一个IP,在一段时间内不重复记录 超过时间的IP删除 统计IP数量就近似在线人数。
      

  2.   

    ip+session来实现记得对代理进行排出
      

  3.   

    <html> 
    <head> 
    <meta http-equiv="refresh" content="10; url=many.php"> 
    </head> 
    <body> 
    <center> 
    <? 
    $time=gettimeofday(void); 
    $tmp=file("time.txt"); 
    if ($tmp[0]=="") 
    {   $fopen0=fopen("time.txt","w+"); 
      fputs($fopen0,$time[sec]); 
      fclose($fopen0);   $fopen1=fopen("ip.txt","w+"); 
      fputs($fopen1,""); 
      fclose($fopen1); 

    $tmp1=file("time.txt"); 
    $equal=($time[sec]-$tmp1[0]); 
    if ($equal>60) 
    {   $fopen0=fopen("time.txt","w+"); 
      fputs($fopen0,""); 
      fclose($fopen0); 
    } $fopen=fopen("ip.txt","a+"); 
    $ip=$REMOTE_ADDR; $flag=1; 
    $tmp2=file("ip.txt"); 
    $con=count($tmp2); for ($i=0;$i<$con;$i++) 

      if ($ip."\n"==$tmp2[$i]) 
      { 
      $flag=0; 
      break; 
      } 
    } if ($flag==1) 

      $ipstring=$ip."\n"; 
      fputs($fopen,$ipstring); 

    fclose($fopen); $tmp3=file("ip.txt"); 
    $value=count($tmp3); 
    echo "目前線上人數:".$value; 
    ?> 
    </center> 
    </body> 
    </html>