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 »