AI摘要
如何在博客侧边栏添加在线人数统计功能。
效果预览
位置在侧边栏的博客信息里面,效果图如下:
实现步骤
添加统计函数,在
/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; }- 在博客信息显示,在
/usr/themes/handsome/component/sidebar.php文件中添加
<li class="list-group-item 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>最后刷新一下网站就可以看到了~

