AI摘要

本文介绍了如何在Typecho博客中添加实时在线人数统计功能。首先,在主题的functions.php文件中添加统计函数代码,然后在模板中添加代码以显示在线人数。提供了通用方法和特定主题的侧边栏及页脚添加方法。通过这些步骤,可以在博客的侧边栏或页脚实时显示当前网站的在线访客数量。

效果预览

添加此功能后,您可以在博客侧边栏或页脚等位置实时显示当前网站的在线访客数量,如下图所示:
预览

实现步骤

步骤一:添加统计函数代码

  • 默认主题:/usr/themes/default/functions.php
  • Handsome主题:/usr/themes/handsome/functions.php

在文件末尾添加以下代码:

展开查看代码

/**
 * 在线人数统计函数
 */
function online_users() {
    // 基本配置参数
    $filename = 'online.txt';        // 数据文件路径,默认在网站根目录
    $cookiename = 'Typecho_Online';  // Cookie名称,用于标识访客
    $onlinetime = 30;                // 在线有效时间(秒),超过此时间未活动则视为离线

    // 读取在线用户数据文件
    $online = file_exists($filename) ? file($filename) : array();
    $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;
        } 
    } 

    // 处理当前访客的Cookie
    if(isset($_COOKIE[$cookiename])) {
        // 已有Cookie,获取访客ID
        $uid = $_COOKIE[$cookiename]; 
    } else {
        // 无Cookie,生成新的唯一访客ID
        $vid = 0;
        do {
            $vid++; 
            $uid = 'U'.$vid; 
        } while(array_key_exists($uid, $nowonline)); 

        // 设置Cookie,默认会话期有效
        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);
    } 

    return $total_online; 
}

步骤二:在模板中显示在线人数

通用方法(适用于任何位置)

在需要显示在线人数的模板文件中,添加以下代码:

<div class="online-users">
    当前在线: <?php echo online_users(); ?> 人
</div>

Handsome主题侧边栏添加方法

  1. 编辑文件:/usr/themes/handsome/component/sidebar.php
  2. 在适当位置(如"统计信息"部分)添加:
<li class="list-group-item"><div class="text-second">
<span class="blog-info-icons"> 
<i data-feather="user"></i></span>
<span class="badge pull-right"><?php echo online_users() ?>
</span><?php _me("在线人数") ?></li>

位置

页脚添加方法

编辑主题的footer.php文件,在合适位置添加:

<div class="site-info">
    <!-- 其他页脚信息 -->
    <span class="online-count">当前在线: <?php echo online_users(); ?> 人</span>
</div>
如果觉得我的文章对你有用,请随意赞赏
END
本文作者:
文章标题:Typecho添加实时在线人数统计功能
本文地址:https://blog.ybyq.wang/archives/331.html
版权说明:若无注明,本文皆Xuan's blog原创,转载请保留文章出处。