一段简单的代码,实现"在线人数"

资源共享 · 02-24 23:16

之前看到别人的博客底部都有一个"在线人数"的功能,对于初来乍到的我来说,很实用、也很酷。我想着要是可以在我的博客中也弄一个,那就酷毙了。结果……

去Typecho官网和Joe主题相关的插件库找了好多有关的插件,大多都是没用(或者叫你付费的),像我这样一穷二白的人,让我付费(根本就不可能, 主要还是因为穷啊 )。接着我又去百度、Gitee、Github、CSDN找……总之,不是操作流程太复杂就是让你付费!

算了,还是自己慢慢捣鼓吧。皇天不负有心人,终于还是让我给弄出来了(虽然方法很简陋、很低端),但对于我来说,功能已经足够使用了。

效果展示

IMG_3970.jpeg

以最原始的方法,实现最简单的事!

具体操作

方法1

1.新建文件

在网站根目录(www、public_html、html、public、web、httpdocs、htdocs…)下创建一个 online.log 文件(用于记录、更新网站实时访问者的ip地址)

2.复制代码

复制下面代码到你的主题目录的footer.php文件中,路径:你的域名/usr/themes/Joe-master/public ,位置大概在网站运行天数的附近(看你自己放哪里)

<?php
$timeout = 60; // 超时时间(单位:秒)
$online_log = "online.log"; // 在线人数记录文件路径
$temp = array();
$entries = "";
$fp = fopen($online_log, "r");
if ($fp) {
    while (!feof($fp)) {
        $entry = fgets($fp);
        $entry = trim($entry);
        if (!empty($entry)) {
            $entry = explode(",", $entry);
            if (($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time())) {
                array_push($temp, $entry[0] . "," . $entry[1]);
            }
        }
    }
    fclose($fp);
} else {
    echo "无法打开在线人数记录文件";
    exit;
}
array_push($temp, getenv('REMOTE_ADDR') . "," . (time() + $timeout));
$maplers = count($temp);
$entries = implode("\n", $temp);
$fp = fopen($online_log, "w");
if ($fp) {
    flock($fp, LOCK_EX);
    fputs($fp, $entries);
    flock($fp, LOCK_UN);
    fclose($fp);
} else {
    echo "无法写入在线人数记录文件";
    exit;
}
echo "在线人数:" . $maplers . "人";
?>

3.回到你的网站,刷新即可!

方法2

1.复制代码

复制下面的代码,粘贴到footer.php的顶部位置(路径:根目录/usr/themes/Joe-master/public/footer.php)

<?php
    //首先你要有读写文件的权限,首次访问不显示,正常情况刷新即可
    $online_log = "slzxrs.dat"; //保存人数的文件到根目录,
    $timeout = 30;//30秒内没动作者,认为掉线
    $entries = file($online_log);
    $temp = array();
    for ($i=0;$i<count($entries);$i++){
        $entry = explode(",",trim($entries[$i]));
        if(($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time())) {
            array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他浏览者的信息,并去掉超时者,保存进$temp
        }
    }
    array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."\n"); //更新浏览者的时间
    $slzxrs = count($temp); //计算在线人数
    $entries = implode("",$temp);
    //写入文件
    $fp = fopen($online_log,"w");
    flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网络文件系统中正常工作
    fputs($fp,$entries);
    flock($fp,LOCK_UN);
    fclose($fp);
    $tj= "在线人数:".$slzxrs."人";
?>

2.把下面的代码放在你想放的位置(比如:网站底部)

<?php echo $tj ?>


方法3

1.在主题目录下的 functions.php 文件中添加以下代码

/* Joe核心文件 */
require_once("core/core.php");

//在线人数
function online_users() {
    $filename='online.txt'; //数据文件
    $cookiename='Nanlon_OnLineCount'; //Cookie名称
    $onlinetime=30; //在线有效时间
    $online=file($filename); 
    $nowtime=$_SERVER['REQUEST_TIME']; 
    $nowonline=array(); 
    foreach($online as $line){ 
        $row=explode('|',$line); 
        $sesstime=trim($row[1]); 
        if(($nowtime - $sesstime)<=$onlinetime){
            $nowonline[$row[0]]=$sesstime;
        } 
    } 
    if(isset($_COOKIE[$cookiename])){
        $uid=$_COOKIE[$cookiename]; 
    }else{
        $vid=0;
        do{
            $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 "$total_online"; 
} 


2.然后在 footer.php 文件中合适的位置处添加以下代码

<?php echo online_users() ?>


Typecho 在线人数 组件 优化 源码分享

上一篇 : "随机图片"动态显示 | 教程

下一篇 : 实现"随机一言"功能 | 无需第三方api


| 黔ICP备2024020400号-1 | 萌ICP备20246777号 | | 当前有 4 人在线 |
本站已加入BLOGS·CN
yjvc.cn
博友圈 星球穿梭
开往-友链接力