TypeCodes

PHP+jQuery实现wordpress当前在线人数统计

1 在线人数统计:插件OR代码

如何实现一个web站点的在线人数统计?方法可能有很多,在最开始接触PHP的时候,大家可能会用session保存当前用户的IP地址和时间;也有人把登录用户的IP地址和登录时间保存到数据库中,然后在需要的地方查询数据库得到相应的数据;当然还可以用txt、html等文件来保存用户的IP和最初登录的时间,然后不断读写文件取得数据;最后,还可以用cnzz等统计方代码或者WP插件通过加载javascript脚本显示当前在线人数。

2 用PHP+jQuery实现

网上搜了下相关的教程,代码基本类似,都是直接通过PHP读写txt文件实现的。博主起初采用这种方法,发现页面加载较之前明显变慢。考虑到不断读写文件对页面速度的影响,博主于是改用jQuery加载的方式实现当前在线人数统计。具体方法如下:

2.1 修改主题底部模板footer.php

在主题的底部模板(footer.php)中找到需要显示人数统计结果的位置,然后在该文件中加上下面的代码:

/**
 * @Description:  jQuery异步调用显示节点
 */
<span class='online'></span>
2.2 修改主题头部模板header.php

在主题的头部模板(header.php)中找到任意一个js文件,然后在最后加上下面的jQuery代码:

/**
 * @Description:  jQuery加载统计代码文件countOEUTQ.php
 */
$(function(){$(".online").load("http://vfhky.sinaapp.com/wp-content/themes/vfhky/countOEUTQ.php");});
2.3 新建统计代码文件countOEUTQ.php

新建一个countOEUTQ.php文件中加入下面的代码,然后把该文件放在2.2步骤中所填写的路径中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
 * @From:  Network && vfhky 2013年09月17日21:23
 * @Description:  文本txt保存的单条数据格式类似于 “123.123.123.123,1379769278#”
 * @return:  输出文本“Online:12”
 **/
<?php
   if (empty($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) === false)
      exit;  //如果直接加载本文件则直接退出
   $online_log = "conutnQudHh0.txt";  //保存数据用,请重命名该文件
   $timeout = 60;  //超时时间,单位秒,越小越精确,但是越耗资源
   $user_arr = @file_get_contents($online_log);  //读取txt文件的全部内容
   $user_arr = explode("#",rtrim($user_arr,"#"));
   $temp = array();
   foreach($user_arr as $value){
      $user = explode(",", trim($value));
      //如果为新的IP地址并且txt文件中的时间记录大于当前时间
      if (($user[0] != getenv("REMOTE_ADDR")) && ($user[1] > time())){
         array_push($temp, $user[0].",".$user[1]);
         $user_arr = implode("#",$temp);
      }
   }
   array_push($temp,getenv("REMOTE_ADDR").",".(time()+$timeout)."#");  //上面两个getenv("REMOTE_ADDR")可以改用更为精确的IP统计变量
   $user_arr = implode("#",$temp);
   $fp = fopen($online_log,"w");//更新文件
   flock($fp, LOCK_EX);  //锁定txt文件,直到写入完数据
   @fputs($fp,$user_arr);
   flock($fp, LOCK_UN);  //释放锁定
   @fclose();  //关闭文件资源
   echo "Online:".count($temp);
?>
3 后记

通过上面的三个步骤,我们就用PHP+jQuery实现了wordpress当前在线人数统计的功能。根据博主自身的体验,相对于直接用PHP读写txt文件,这种方法对页面的载入速度影响小很多。另外,超时变量$timeout不宜过小,否则会给服务器造成较大负荷。

打赏支持

Comments »