PHP统计当前在线人数

一: 主要逻辑思维(及代码1):

本文主要是通过IP来区分不同的访问用户,然后将用户信息保存在txt文本中来实现统计当前在线人数的功能。

3.1、创建php文件 创建一个名为“countOnline.php”的PHP文件用来实现统计当前在线人数的功能。

3.2、统计在线人数功能代码 (1)定义保存用户信息的文本 $user_online="count.txt";  //保存在线用户信息的文件

touch($user_online);  // 若无此文件则创建

(2)定义超时时间 $timeout=30;   // 30秒内没动作,认为掉线

(3)文件内容读取 $user_arr=file_get_contents($user_online);// 将文件内容赋予一个字符串

$user_arr=explode("#",rtrim($user_arr,'#'));//将字符串分割为数组

(4)获取远程在线用户信息

$temp=array();  // 放置所有用户信息

foreach($user_arras $value){

         $user=explode(",",trim($value));

         // 如果不是本机IP,并且时间没有超过,则放入数组temp中

         // getenv('REMOTE_ADDR')是获取远程IP地址(在IIS下无效果),$_SERVER['REMOTE_ADDR']也可以获取IP地址。

                  if(($user[0]!=getenv('REMOTE_ADDR'))&&($user[1]>time())){

                                    array_push($temp,$user[0].",",$user[1]);

                  }

         }

(5)保存本用户的信息

array_push($temp,getenv('REMOTE_ADDR').",".(time()+($timeout)).'#');

$user_arr=implode("#",$temp);

(6)以更新的形式打开文件

$fp=fopen($user_online,"w");

(7)对文件进行写入

flock($fp,LOCK_EX);// 锁定文件(保证同时只有一个用户在对文件进行写入操作)

fputs($fp,$user_arr);  // 写入文件

flock($fp,LOCK_UN);  // 释放锁定

fclose($fp);    // 关闭文件

(8)输出当前在线人数至页面

echo"当前有".count($temp)."人在线"; // 输出当前在线人数

四、网页测试 开启Apache服务器后,打开浏览器,在浏览器地址栏中输入文件地址,例如:

localhost:8080/countOnline.php 显示人数

二、精确统计在线人数实例(实用代码二)

<?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);
}
}
echo 'document.write("'.$total_online.'");';
?>

摘自网上内容 因资源年代久远 且不知原作者 无法区分原作者 故无法找出原出处 如有侵权 请联系我 删除!

记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论