澳门新葡亰平台游戏网站PHP如何统计在线人数

在论坛里有人问作者怎么总括在眼线数?小编也不精晓如何是最佳的秘诀。上面是本站的兑现的准绳,小编把它写出来,供大家参照他事他说加以考察。那只是本身的措施,断定不是最棒的,还期望高手们予以指正。其实,要实在计算同有时间在并发在线的总人口,是一件不太现实的事,那是因为HTTP协议是种无状态的协商。当顾客端向服务器发出一个呼吁时,服务器会马上创制叁个新的TCP/IP连接,在该会话甘休后,如页面完全载入后,这么些三回九转就关闭了。日常的话,在窥探数指的定是在听天由命时间段内同期做客站点的人口,并非依照HTTP左券的并发连接数。
让大家先来拜会一个访客是哪些访问四个网址的。他在浏览器的地址栏里输入了目的网址的地方,然后在一段时间内连发浏览该网址的网页,最终,关闭浏览器或输入新的网址――浏览甘休了。对于服务器带来讲,访客到来是能够知晓的,访客在浏览页面也是足以了然的,不过怎么明白怎么时候走的吗?由于HTTP合同是无状态的,所以不能够清楚。经常的做法是记录访客最终一次浏览站点页面包车型地铁时光。纵然该访客在一个一定的年华内并未有新的动作,那么能够认为她走了。
办事处方的那一个思路,小编感觉最棒用数据库,因为数据库要比别的措施如文本文件的成效要高。下边包车型客车例子是利用MySQL的,超轻巧选择别的类型的数据库系统。然后,在具有的页面中调用那个PHP文件,一方面更新数据,其他方面可以体现在线的人头。可是,有一个难点–到底在多久内访问的人终于并发的呢?平时的话,是半时辰,相当于1800秒,具体的要依靠网址的场合来明显。这一个小时越长,总计出的并发在线的人头就越来越多。本站的是15分钟,900秒。用报事人的IP地址表示叁个访谈者是个科学的格局。在拨号上网的景色下,被分配了扳平IP地址的五个客商在短期内浏览同二个网址的可能率是一点都不大的。
首先,用MySQL的工具建三个表: CREATE TABLE ccol( id integer not null
auto_increment, #记录的ID ip char(15) not null, #媒体人的IP地址
dtstamp datetime not null, #终极访谈时间 uri char(255卡塔尔国,
#访谈者须要的U奥迪Q5I primary key (id卡塔尔 State of Qatar; 然后,写一段PHP代码: ? /*
文件:ccol.php – ConCurrent OnLine statistics 指标:总括同期在线浏览的人头
小编:Hunte, hunte@phpuser.com 改革:二〇〇二-4-25 */ $duration=1800;
require “db.php”;

笔者们要总括在一段时间内访谈站点的人头,有四种缓和方案,你能够运用cookie,session结合文本或然数据库来记录顾客访谈数。本文将利用PHP,结合Mysql以至jQuery,显示多少个计算在眼线数以至访客地区分布的身体力行。

平日性,当访客访谈网址时,页面记录顾客的cookie信息,当cookie过期即认为顾客不在线。本文中大家接受PHP记录访客IP,并在客户端记录cookie及逾期时间,同时通过微博IP地址接口,获取访客的地理地方(本例只记录省份),一并写入mysql表中,就可以总括一段时间内的访客总量,也得以查看访客的地区布满。

HTML

大家在页面上停放叁个显妥帖前在眼线数的div#total以致二个用来显示访客地区遍布的列表#onlinelist,私下认可我们在列表中放置一张与加载动漫图片,前面大家用jQuery调控当鼠标滑向时突显详细列表。

 代码如下

<div class=”demo”> 
      <div id=”total”>当前在线:<span id=”onlinenum”></span></div> 
    <ul id=”onlinelist”> 
        <li><img src=”loader.gif”></li> 
    </ul> 
</div> 

css

大家用CSS来渲染彰显效果,为了便是不让大家的言传身教很丢脸,上边包车型客车代码中,我们运用了CSS3,时期在上扬呀,所以建议选取今世浏览器预览效果。

.

 代码如下

demo{width:150px; margin:20px auto; font-size:14px} 
#total{padding:6px 10px; background:#090 url(arr.png) no-repeat right top; color:#fff;  
cursor:pointer; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px;  
-moz-box-shadow:0 0 3px #ccc; -webkit-box-shadow:0 0 3px #ccc;box-shadow:0 0 3px #ccc;} 
#onlinelist{background:#f7f7f7; border:1px solid #d3d3d3; display:none; -moz-border-radius:5px;  
-webkit-border-radius:5px; border-radius:5px; -moz-box-shadow:0 0 3px #ccc;  
-webkit-box-shadow:0 0 3px #ccc;box-shadow:0 0 3px #ccc;} 
#onlinelist li{height:20px; line-height:20px;padding:4px 6px;border-bottom:1px dotted #d9d9d9} 
#onlinelist li span{float:right} 
#onlinelist li:hover{background:#fff} 

Mysql

我们要未雨准备粮草先行一张数据表online,用来记录访客IP、地区及拜望时间。整个示例总括进度都借助那张表,其布局如下:

 代码如下

CREATE TABLE IF NOT EXISTS `online` ( 
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `ip` varchar(30) NOT NULL, 
  `province` varchar(64) NOT NULL, 
  `addtime` int(10) NOT NULL DEFAULT ‘0’, 
  PRIMARY KEY (`id`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 

 

PHP

online.php用来记录访客音信,包蕴IP地址和所在。首先检查测量检验数据表中是还是不是有访客IP记录,倘若有,则只更新访谈时间,不然,获取客商省份区域,并将客户IP即省份区域插入到表中。在这里,可以料定是还是不是留存访客的cookie记录,借使不真实则向新浪IP地址库哀告获取访客的区域音讯,并安装cookie值和过期时间。最终,大家删除表中已经晚点的笔录,总括总记录数并出口,详细请看代码注释。

 代码如下

include_once(‘connect.php’); //连接数据库 
 
$ip = get_client_ip(卡塔尔; //获取客户端IP 
$time = time(); 
//查询表中是还是不是有ip为当下访客IP的记录 
$query = mysql_query(“select id from online where ip=’$ip'”); 
if(!mysql_num_rows($query卡塔尔(قطر‎卡塔尔国{//纵然一纸空文访客IP 
    if($_COOKIE[‘geoData’]卡塔尔(قطر‎{//若是存在cookie,则得到客商的区域 
        $province = $_COOKIE[‘geoData’]; //区域(省份) 
    }else{ 
        $api = “澳门新葡亰平台游戏网站 ,”; 
        $json = file_get_contents($api卡塔尔国;//调用和讯IP地址库 
        $arr = json_decode($json,true);//解析json 
        $province = $arr[‘province’];//获取省份 
        setcookie(‘geoData’,$province,$time+600卡塔尔(قطر‎; //设置cookie,设置过期时间为10分钟 
    } 
    //将访客音信插入到数据表中 
    mysql_query(“insert into online (ip,province,addtime) values (‘$ip’,’$province’,’$time’)”); 
}else{//假使存在,则更新该客户访问时间 
    mysql_query(“update online set addtime=’$time’ where ip=’$ip'”); 

//删除已过期的记录 
$outtime = $time-600; 
mysql_query(“delete from online where addtime<$outtime”); 
//总计总记录数,即在线客户数 
list($totalOnline) = mysql_fetch_array(mysql_query(“select count(*) from online”));  
echo $totalOnline;//输出在线总的数量 
mysql_close(); 

 

至现今日头条IP地址库的调用,您也能够参见helloweba.com随笔依据IP定位客商所在城市新闻的牵线。

函数get_client_ip(卡塔尔用来取得顾客实际IP。

 代码如下

function get_client_ip() { 
    if (getenv(“HTTP_CLIENT_IP”) && strcasecmp(getenv(“HTTP_CLIENT_IP”), “unknown”)) 
        $ip = getenv(“HTTP_CLIENT_IP”); 
    else if (getenv(“HTTP_X_FORWARDED_FOR”) && strcasecmp(getenv(“HTTP_X_FORWARDED_FOR”),  
“unknown”)) 
        $ip = getenv(“HTTP_X_FORWARDED_FOR”); 
    else if (getenv(“REMOTE_ADDR”) && strcasecmp(getenv(“REMOTE_ADDR”), “unknown”)) 
        $ip = getenv(“REMOTE_ADDR”); 
    else if (isset ($_SERVER[‘REMOTE_ADDR’]) &&  
$_SERVER[‘REMOTE_ADDR’] && strcasecmp($_SERVER[‘REMOTE_ADDR’], “unknown”)) 
        $ip = $_SERVER[‘REMOTE_ADDR’]; 
    else 
        $ip = “unknown”; 
    return ($ip); 

 

geo.php用来计算外市份(区域)访客人数布满。通过查询数据库,并按省份分组排序就能够,注意大家将最后的数额集以JSON的花样出口,便于前端ajax交互作用。

 代码如下

include_once(‘connect.php’卡塔尔国;//连接数据库 
//查询区域总计 
$sql = “select province,count(*) as total from online group by province order by total desc”; 
$result = mysql_query($sql); 
while($row=mysql_fetch_array($result)){ 
    $list[] = array( 
        ‘province’ => $row[‘province’], 
        ‘total’ => $row[‘total’] 
    );     

echo json_encode($list卡塔尔(قطر‎;//以json格式输出 

 

jQuery

前端页面须求做的是,页面加载时显得来访的客人总量,即接收ajax乞请online.php就能够。然后当鼠标滑向计算箭头时,通过ajax央浼geo.php获取每个地区域省份的在窥探数,并以下拉的方式展现效果。

 代码如下

$(function(){ 
    $(“#onlinenum”).load(“online.php”); 
     
    $(“.demo”).hover(function(){ 
        $(“#onlinelist”).slideDown(“fast”); 
        var str = ”; 
        $.getJSON(“geo.php”,function(json){ 
            $.each(json,function(index,array){ 
                str = str + “<li><span>”+array[‘total’]+”</span>”+array[‘province’]+”</li>”; 
            }); 
            $(“#onlinelist”).html(str); 
        }); 
    },function(){ 
        $(“#onlinelist”).slideUp(“fast”); 
    }); 
}); 

一体化实例

 代码如下

<!DOCTYPE HTML>
<html>
<head>
<meta charset=”utf-8″>
<title>PHP+MySQL+jQuery总计当前在线客商数</title>
<link rel=”stylesheet” type=”text/css” href=”../css/main.css” />
<style type=”text/css”>
.demo{width:150px; margin:20px auto; font-size:14px;
position:relative}
#total{padding:6px 10px; background:#090 url(arr.png) no-repeat right
top; color:#fff; cursor:pointer; -moz-border-radius:5px;
-webkit-border-radius:5px; border-radius:5px; -moz-box-shadow:0 0 3px
#ccc; -webkit-box-shadow:0 0 3px #ccc;box-shadow:0 0 3px #ccc;}
#onlinelist{background:#f7f7f7; border:1px solid #d3d3d3;
display:none; -moz-border-radius:5px; -webkit-border-radius:5px;
border-radius:5px; -moz-box-shadow:0 0 3px #ccc; -webkit-box-shadow:0 0
3px #ccc;box-shadow:0 0 3px #ccc; position:absolute; top:30px;
width:150px}
#onlinelist li{height:20px; line-height:20px; padding:4px 6px;
border-bottom:1px dotted #d9d9d9}
#onlinelist li span{float:right}
#onlinelist li:hover{background:#fff}
</style>
<script type=”text/javascript”
src=”../js/jquery.js”></script>
<script type=”text/javascript”>
$(function(){
 $(“#onlinenum”).load(“online.php”);
 
 $(“.demo”).hover(function(){
  $(“#onlinelist”).slideDown(“fast”);
  var str = ”;
  $.getJSON(“geo.php”,function(json){
   $.each(json,function(index,array){
    str = str +
“<li><span>”+array[‘total’]+”</span>”+array[‘province’]+”</li>”;
   });
   $(“#onlinelist”).html(str);
  });
 },function(){
  $(“#onlinelist”).slideUp(“fast”);
 });
});
</script>
</head>

<body>

<div id=”main”>
  <h2 class=”top_title”><a href=”blog-206.html”
title=”点击看教程”>PHP+MySQL+jQuery总计当前在线客户数</a></h2>
  <div class=”demo”>
   <div id=”total”>当前在线:<span
id=”onlinenum”></span></div>
    <ul id=”onlinelist”>
     <li><img src=”loader.gif”></li>
    </ul>
  </div>
  <br/><br/><br/><br/><br/>
 
</div>

</body>
</html>

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图