AI摘要

本文介绍了为Typecho博客的handsome主题添加服务器状态栏功能的方法,包括实时监控服务器CPU、内存、磁盘使用率,显示服务器运行时间、IO和网络状态,获取访客IP、地理位置、设备和浏览器信息等。作者提供了详细的实现步骤和代码,包括修改headnav.php和footer.php文件,创建serverInfo.php文件,以及使用宝塔面板配置的说明。该功能在CentOS Stream 9上测试通过,支持各种网络环境下的IP地址解析。

背景说明

使用网上的教程设置后,发现"您的ip""网络地址""浏览器信息""您的设备"都无法正常显示。经过排查,发现可能与CentOS 7停止维护有关。于是我对代码进行了修改,使其能在CentOS Stream 9上正常运行。但对于Debian操作系统,查看此篇教程Debian适配版

修改前的效果

修改后效果预览

添加服务器状态栏后,可以在博客顶部点击状态图标查看服务器运行情况和访客信息,界面效果如下:

修改后的效果预览图

功能特点

  • 实时监控服务器CPU、内存、磁盘使用率
  • 显示服务器运行时间、IO和网络状态
  • 准确获取访客IP、地理位置、设备和浏览器信息
  • 全面支持电信、联通、移动等各类网络环境
  • 兼容Linux系统(Centos 7/8、Ubuntu等)(我不知道兼不兼容,Centos 7停止维护后我再也没用过,不然就亲自试一下)
  • 我的环境是:CentOS Stream 9 64位PHP8.0typecho1.2.1

实现步骤

1. 修改 headnav.php 文件

文件位置:usr/themes/handsome/component/headnav.php

在找到如下代码段:

<!-- statitic info-->
<?php
if (@Utils::getExpertValue("show_static",true) !== false): ?>
<ul class="nav navbar-nav hidden-sm">

    <!-- 在此追加代码 -->

    <li class="dropdown pos-stc">

添加代码:

展开查看详情

    <!-- 这里开始是新追加的内容 -->
    <li class="dropdown pos-stc" id="StateDataPos">
        <a id="StateData" href="#" data-toggle="dropdown" class="dropdown-toggle feathericons dropdown-toggle">
          <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-activity"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
          <span class="caret"></span>
        </a>
        <div class="dropdown-menu wrapper w-full bg-white">
            <div class="row">
                <div class="col-sm-4 b-l b-light">
                    <div class="m-t-xs m-b-xs font-bold">运行状态</div>
                    <div class="">
                        <span class="pull-right text-danger" id="cpu">
                            <i class="fa fa-spinner fa-spin" aria-hidden="true"></i>
                        </span>
                        <span>CPU占用
                            <span class="badge badge-sm bg-info">2核心</span>
                        </span>
                    </div>
                    <div class="progress progress-xs m-t-sm bg-default">
                        <div id="cpu_css" class="progress-bar bg-danger" data-toggle="tooltip" style="width: 100%"></div>
                    </div>
                    <!-- 其他运行状态指标 -->
                </div>
                <div class="col-sm-4 b-l b-light visible-lg visible-md">
                    <div class="m-t-xs m-b-xs font-bold">网络状态</div>
                    <!-- 网络状态指标 -->
                </div>
                <div class="col-sm-4 b-l b-light visible-lg visible-md">
                    <div class="m-t-xs m-b-sm font-bold">访客信息</div>
                    <!-- 访客信息指标 -->
                </div>
            </div>
        </div>
    </li>
    <!-- 新追加的内容到此结束 -->

2. 修改 footer.php 文件

文件位置:usr/themes/handsome/component/footer.php

在找到如下代码位置:

<?php $this->options->bottomHtml(); ?>

   <!-- 在此追加代码 -->

</body>
</html><!--html end-->

添加如下JavaScript代码:

展开查看详情

<!-- 这里开始是新追加的内容 -->
<script>
var stateUrl = '/serverInfo.php';
var se_rx;
var se_tx;
var si_rx;
var si_tx;

// 格式化数值显示
function returnFloat(value){
    return value.toFixed(2)+'%';
}

// 获取访客信息
function UserInfo(){
    $.ajax({
        type: "get",
        url: stateUrl,
        data: {action: 'getip'},
        async: true,
        dataType: "json",
        beforeSend: function(){
            $("#ip").html('<span class="badge badge-sm bg-dark">获取中...</span>');
            $("#address").html('<span class="badge badge-sm bg-dark">获取中...</span>');
        },
        error: function(){
            $("#ip").html('<span class="badge badge-sm bg-dark">'+window.location.hostname+'</span>');
            $("#address").html('<span class="badge badge-sm bg-dark">本地访问</span>');
        },
        success: function(data){
            if(data && data.ip) {
                $("#ip").html('<span class="badge badge-sm bg-dark">'+data.ip+'</span>');
                $("#address").html('<span class="badge badge-sm bg-dark">'+(data.location || '本地网络')+'</span>');
            } else {
                $("#ip").html('<span class="badge badge-sm bg-dark">'+window.location.hostname+'</span>');
                $("#address").html('<span class="badge badge-sm bg-dark">本地访问</span>');
            }
        }
    });
}

// 状态栏点击事件
$('#StateData').click(function(){
    clearInterval(window.getnet);
    clearInterval(window.info);
    window.getnet = setInterval(function(){
        if($('#StateDataPos').is('.open')){
            state();
            $("#sys_times").html('<span class="badge badge-sm bg-dark">'+getNowFormatDate()+'</span>');
        }
    },1000);
    UserInfo();
});
</script>
<!-- 新追加的内容到此结束 -->

3. 创建 serverInfo.php 文件

在网站根目录创建 serverInfo.php 文件,内容如下:

此处内容需要评论回复后(审核通过)方可阅读。

使用宝塔面板配置说明

若使用宝塔面板环境,请修改网站根目录中的 .user.ini 文件,在 open_basedir 后面追加 :/proc/

open_basedir=/www/wwwroot/your.domain/:/tmp/:/proc/

特别说明

  1. 该功能基于handsome主题开发,其他主题需自行修改适配
  2. 代码支持Linux系统,在CentOS Stream 9上测试通过
  3. 支持各种网络环境下的IP地址解析(电信、联通、移动)
  4. 能够准确识别访客设备、浏览器信息

完整代码

完整代码已上传至我的GitHub,欢迎访问:
GitHub仓库

如有问题,欢迎在评论区留言讨论

如果觉得我的文章对你有用,请随意赞赏
END
本文作者:
文章标题:Typecho handsome添加顶部服务器状态栏最新版教程
本文地址:https://blog.ybyq.wang/archives/41.html
版权说明:若无注明,本文皆Xuan's blog原创,转载请保留文章出处。