分类 技术分享 下的文章

typecho 默认的数据库不支持emoji,所以需要通过一下方式修改数据库的编码。

如果你的数据库不支持emoji,但是在文章编辑中或者主题设置中使用了emoji会导致你的内容丢失!

alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_options convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table typecho_users convert to character set utf8mb4 collate utf8mb4_unicode_ci;

执行上述sql语句来修改表的编码,如果用的是宝塔面板和MySQL数据库,一般有可视化的phpmyadmin界面,可以在phpmyadmin的控制台里面执行上面的语句,如果是服务器可以在服务器上连接mysql后执行。

最后将 Typecho 目录下的config.inc.php 配置文件中数据库定义参数中的 charset 为 utf8mb4

$db->addServer(array (
      'host'      =>  localhost, 
      'user'      =>  'root',
      'password'  =>  'root',
      'charset'   =>  'utf8mb4', //修改这一行
      'port'      =>  3306,
      'database'  =>  ''
  ), Typecho_Db::READ | Typecho_Db::WRITE);

如果还是不行,进入数据库管理软件phpmyadmin,选中要改的数据库,点击上方的操作,下滑找到排序规则,将选项改为utf8mb4_unicode_ci,记得选中下方选项框

效果预览

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

实现步骤

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

  • 默认主题:/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>

转载自Xuan's blog

文章标题:Typecho添加实时在线人数统计功能 本文地址:https://blog.ybyq.wang/archives/331.html

下载压缩包解压即可

命令

启动

start .\nginx

停止

.\nginx -s stop

强制停止所有 Nginx 进程

taskkill /f /im nginx.exe > \$null

仅用于多次启动冲突时 重复执行 start nginx 或直接双击 nginx.exe 会生成多组进程,停止命令无法覆盖所有实例

cheveretov4新增了ExifTool、ExifTran、FFmpeg的支持,但是宝塔又不能一键安装,研究许久发现了解决办法。

手动执行命令安装三个插件,以Debian12为例:

ExifTool

通过 apt 包管理器安装(推荐,简单快捷)

ExifTool 已收录在 Debian 官方软件源中,直接通过 apt 安装即可:

步骤 1:更新 apt 源缓存

apt update -y

步骤 2:安装 ExifTool

apt install libimage-exiftool-perl -y

注:Debian 中 ExifTool 的包名是libimage-exiftool-perl(Perl 库形式),安装后可直接通过exiftool命令调用。

步骤 3:验证安装

执行以下命令,若输出版本信息则安装成功:

exiftool -ver

ExifTran

通过 apt 包管理器安装(推荐,Debian 9 + 通用)

# 更新apt缓存(可选,确保源最新)
apt update -y
​
# 安装exiftran
apt install exiftran -y

ffmpeg(包含ffprobe)

更新软件包列表

sudo apt update

安装 ffmpeg包

sudo apt install ffmpeg

此命令会自动安装 ffmpeg(命令行音视频处理工具)、ffprobe(媒体文件分析工具)、ffplay(简易播放器)以及所有必需的依赖库(如 libavcodeclibavformatlibavutil 等)。

结语

全部安装完毕后,关闭防跨站,重启服务器,刷新页面就可以看到了。

如果仍然没有的话,在程序目录/app/env.php中增加

'CHEVERETO_BINARY_EXIFTOOL' => 'exiftool',
    'CHEVERETO_BINARY_EXIFTRAN' => 'exiftran',
    'CHEVERETO_BINARY_FFMPEG' => 'ffmpeg',
    'CHEVERETO_BINARY_FFPROBE' => 'ffprobe',