<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[开心彩棉糖]]></title> 
<atom:link href="https://xn--h0t0irjt23akiz.cn/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[开心彩棉糖的个人博客]]></description>
<link>https://xn--h0t0irjt23akiz.cn/</link>
<language>zh-cn</language>

<item>
    <title>轻量个人网盘</title>
    <link>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/18.html</link>
    <description><![CDATA[<h1>轻量个人网盘</h1>
<p>对标蓝奏云网盘开发的个人网盘系统。H5 自适应前端 + PHP 7.3+ + SQLite，<strong>无需 MySQL</strong>，开箱即用。<br />
纯原生 JS 实现（零框架、零 CDN 依赖），全站不使用原生弹窗（统一自定义模态），全站使用无感刷新（AJAX 局部更新，无整页刷新）。</p>
<ul>
<li>当前版本：<strong>v0.0.5</strong></li>
</ul>
<hr />
<h2>一、源码说明</h2>
<h3>1. 技术栈</h3>
<table>
<thead>
<tr>
<th>项目</th>
<th>选型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>后端</td>
<td>PHP 7.3+</td>
<td>PDO 数据访问，兼容 7.3 ~ 8.x</td>
</tr>
<tr>
<td>数据库</td>
<td>SQLite</td>
<td>单文件数据库，启用 WAL + busy_timeout</td>
</tr>
<tr>
<td>前端</td>
<td>原生 HTML/CSS/JS</td>
<td>零框架、零 CDN，H5 自适应（手机/平板/PC）</td>
</tr>
<tr>
<td>Web 服务器</td>
<td>Nginx / Apache</td>
<td>宝塔面板可一键部署</td>
</tr>
</tbody>
</table>
<h3>2. 目录结构</h3>
<pre><code>轻量个人网盘/
├── public/                      # 唯一对外暴露的 Web 目录（站点根目录必须指向这里）
│   ├── index.php                # 统一入口：自动加载、路由分发、未安装强制跳安装向导
│   └── assets/
│       ├── css/app.css          # 全站样式：H5 自适应、网格/列表视图、暗色主题
│       └── js/
│           ├── app.js           # 核心工具库 nd：api 请求、toast、modal、confirm、
│           │                    #   promptField、随机提取码 randCode、文件 SHA1 分片计算
│           ├── disk.js          # 网盘主页：列表渲染、拖拽/分片上传、预览、分享、
│           │                    #   右键菜单、多选批量、目录树移动、搜索排序
│           ├── share.js         # 分享落地页（免登录）：提取码门、文件/文件夹渲染、预览下载
│           ├── share-manage.js  # 我的分享管理：列表、复制链接/提取码、修改、取消
│           ├── recycle.js       # 回收站：恢复、彻底删除、清空
│           └── admin.js         # 管理后台：用户/日志/设置（局部渲染，无感刷新）
├── app/                         # 应用代码（Web 不可直接访问）
│   ├── lib/
│   │   ├── DB.php               # SQLite PDO 封装 + 幂等建表迁移（users/folders/files/
│   │   │                        #   shares/settings/logs/login_attempts）
│   │   ├── Auth.php             # 会话管理、CSRF、bcrypt 密码、remember_token、
│   │   │                        #   IP 防爆破（5 次/15 分钟）、requireLogin/requireAdmin
│   │   ├── Resp.php             # 统一 JSON 响应（code/msg/data）
│   │   ├── Router.php           # 路由：index.php?r=模块/动作
│   │   └── functions.php        # 公共函数：设置读写、日志、大小格式化、扩展名判断等
│   ├── controllers/             # 7 个控制器
│   │   ├── InstallController    # 安装向导：生成 config.php + 建库 + 创建管理员
│   │   ├── AuthController       # 登录/注册/退出/改密
│   │   ├── DiskController       # 网盘页面：主页/我的分享/回收站/个人中心
│   │   ├── FileApiController    # 文件 API：列表/新建/重命名/移动/删除/回收站/ZIP/
│   │   │                        #   上传初始化/分片/合并/秒传
│   │   ├── ShareController      # 分享：创建/修改/取消(直接删除)/落地页/提取码校验/下载计数
│   │   ├── UserApiController    # 用户 API：个人空间信息/修改密码
│   │   └── AdminController      # 管理后台：用户管理/站点设置/日志（支持 ?partial=1 局部渲染）
│   └── views/                   # 视图模板（PHP 直接输出，带 XSS 转义）
│       ├── install.php          # 安装向导页
│       ├── auth/                # 登录、注册（独立页面，自带 CSS/JS 引用）
│       ├── disk/                # 网盘主页、我的分享、回收站、个人中心
│       ├── admin/               # 后台页面 + _users_table/_logs_table 局部视图（无感刷新）
│       ├── share/view.php       # 免登录分享落地页
│       └── layout/              # header/footer 公共布局
├── storage/                     # 运行数据（Web 禁止访问，含 .htaccess + Nginx deny）
│   ├── files/                   # 物理文件：按 sha1 前 2 位分目录存放，文件名无扩展名（防执行）
│   ├── tmp/                     # 分片上传临时目录
│   └── thumbs/                  # 图片缩略图
├── data/netdisk.db              # SQLite 数据库（运行时生成，不入交付包）
├── config.sample.php            # 配置示例（常量：DB_FILE/STORAGE_DIR/配额/单文件上限/
│                                #   分片大小/扩展名白名单/注册开关/回收站天数/防爆破参数）
└── config.php                   # 安装向导生成（含随机 SECRET_KEY，不随包交付）</code></pre>
<h3>3. 核心功能</h3>
<p><strong>账号系统</strong></p>
<ul>
<li>注册 / 登录 / 退出 / 修改密码 / 记住我（30 天）</li>
<li><strong>第一个注册的用户自动成为管理员</strong>（无会员体系）</li>
<li>登录防爆破：同一 IP 连续失败 5 次锁定 15 分钟</li>
<li>管理员可封禁/解封用户、重置密码、调整空间配额</li>
</ul>
<p><strong>网盘文件</strong></p>
<ul>
<li>文件夹树形管理（新建/重命名/移动[目录树选择器，拒绝移入自身子孙]/删除）</li>
<li>文件上传：<strong>分片上传 + 断点续传 + 秒传</strong>（SHA1 校验，同内容不重复存储）</li>
<li>下载：断点续传（HTTP Range 支持）</li>
<li>重命名 / 移动 / 多选批量 / 拖拽上传 / 搜索 / 排序（时间/名称/大小）/ 网格与列表双视图</li>
<li>空间配额显示与实时计算</li>
</ul>
<p><strong>分享</strong></p>
<ul>
<li>文件/文件夹分享，链接免登录访问</li>
<li>提取码（留空免提取码）、有效期（1/7/30 天/永久）</li>
<li>访问与下载次数统计、分享管理（修改/取消[直接删除记录]）</li>
<li>复制链接 / 复制提取码 / 二维码（外网可达时）</li>
</ul>
<p><strong>预览与增强</strong></p>
<ul>
<li>图片（缩略图）、文本、PDF、音视频在线预览</li>
<li>ZIP 打包下载（未启用 zip 扩展时自动降级为逐个下载）</li>
<li>回收站：恢复 / 彻底删除 / 清空（引用计数释放物理文件）</li>
<li>暗色主题一键切换</li>
</ul>
<p><strong>管理后台（仅管理员）</strong></p>
<ul>
<li>用户管理（无感刷新：封禁/配额/重置密码行内操作）</li>
<li>站点设置：站点名、开放注册、默认配额、单文件上限、扩展名白名单、回收站保留天数、公告</li>
<li>系统信息 / 操作日志（筛选、分页，局部渲染）</li>
</ul>
<h3>4. 关键设计</h3>
<ul>
<li><strong>路由约定</strong>：<code>index.php?r=模块/动作</code>，如 <code>?r=file/uploadInit</code>、<code>?r=share/view&amp;code=xxx</code></li>
<li><strong>统一响应</strong>：<code>{code:0, msg:'ok', data:...}</code>，前端 <code>nd.api()</code> 统一处理</li>
<li><strong>安全</strong>：PDO 预处理、CSRF Token 校验、输出转义、按 user_id 越权隔离、<br />
物理文件哈希重命名且无扩展名、storage/data 双重防访问（.htaccess + Nginx deny）</li>
<li><strong>无感刷新</strong>：列表/搜索/分页/批量操作/后台管理全部 AJAX 局部渲染，无 <code>location.reload()</code></li>
<li><strong>无原生弹窗</strong>：确认/输入/预览/分享均使用 <code>nd.modal / nd.confirm / nd.promptField</code>，全站无 alert/confirm/prompt</li>
</ul>
<hr />
<h2>二、部署说明</h2>
<h3>1. 环境要求</h3>
<ul>
<li>PHP 7.3 及以上，需启用扩展：<code>pdo_sqlite</code>、<code>sqlite3</code>、<code>gd</code>、<code>fileinfo</code>、<code>mbstring</code>、<code>json</code></li>
<li>建议启用 <code>zip</code> 扩展（打包下载依赖，未启用时自动降级为逐个下载）</li>
<li>无需 MySQL / 无需安装数据库服务</li>
<li>Web 服务器：Nginx / Apache 均可（宝塔面板可一键）</li>
</ul>
<h3>2. 宝塔面板部署步骤</h3>
<ol>
<li>新建站点（PHP 版本选 7.3 及以上），<strong>站点根目录（运行目录）指向程序包内的 <code>public/</code> 目录</strong>；</li>
<li>上传程序包并解压，确保 <code>public</code>、<code>app</code>、<code>storage</code>、<code>data</code>、<code>config.sample.php</code> 均在站点内；</li>
<li>设置目录权限：<code>storage/</code> 与 <code>data/</code> 需可写（Linux 下 <code>chmod -R 755</code>，目录 775 亦可）；</li>
<li>确认 PHP 已启用 <code>pdo_sqlite</code> 扩展：软件商店 → PHP 设置 → 安装扩展 → pdo_sqlite；</li>
<li>浏览器访问站点域名，自动进入<strong>安装向导</strong>，填写站点名 + 管理员账号密码即完成安装<br />
（<strong>第一个注册的账号自动成为管理员</strong>）；</li>
<li>安装完成后自动生成 <code>config.php</code>（含随机 SECRET_KEY，请勿外泄；打包/迁移时不要包含它）。</li>
</ol>
<blockquote>
<p>⚠️ <strong>常见错误</strong>：站点根目录指向了项目根目录（而非 <code>public/</code>）会导致首页 403。<br />
宝塔中通过 网站 → 设置 → 网站目录 → 运行目录 选择 <code>/public</code> 即可。</p>
</blockquote>
<h3>3. Nginx 加固配置（宝塔默认即可，以下为推荐加固）</h3>
<pre><code class="language-nginx"># 存储与数据库目录禁止直接访问（含禁止执行 PHP）
location ~ ^/(storage|data)/ {
    deny all;
    return 403;
}

# 伪静态美化地址（可选，默认 ?r= 路由无需配置）
location / {
    try_files $uri $uri/ /index.php?r=$uri&amp;$query_string;
}</code></pre>
<ul>
<li><code>public/</code> 是唯一对外暴露的目录，入口为 <code>public/index.php</code>；</li>
<li>物理文件按校验值存放于 <code>storage/files/</code>（文件名无扩展名，天然不可执行）。</li>
</ul>
<h3>4. Apache 部署</h3>
<ul>
<li>无需额外配置：<code>storage/</code> 与 <code>data/</code> 已内置 <code>.htaccess</code> 拒绝访问；</li>
<li>需开启 <code>AllowOverride All</code> 以启用 <code>.htaccess</code>。</li>
</ul>
<h3>5. 数据备份与恢复</h3>
<ul>
<li><strong>全量备份</strong> = 复制 <code>data/netdisk.db</code> + <code>storage/</code> 两个目录；</li>
<li><strong>恢复</strong>：将备份的 <code>data/</code> 与 <code>storage/</code> 放回原位置即可，无需额外操作；</li>
<li>注意：<code>config.php</code> 中 SECRET_KEY 变更会使旧「记住我」会话失效，属正常现象。</li>
</ul>
<h3>6. 已知限制</h3>
<ul>
<li>视频缩略图需 ffmpeg，默认未集成（列表以图标显示）；</li>
<li>二维码分享图由外部服务生成（api.qrserver.com），服务器无法访问外网时仅能复制链接；</li>
<li>单文件上限默认 100MB（后台可调至 2GB）；服务器 <code>upload_max_filesize</code> 小于分片大小时，<br />
程序会自动降低分片大小适配，正式环境建议调大上传限制；</li>
<li>SQLite 适合个人/小团队低频写入，高并发场景建议迁移 MySQL（接口均为 PDO，改动成本低）。</li>
</ul>
<hr />
<h2>三、更新记录</h2>
<h3>v0.0.5（2026-10-26）</h3>
<ul>
<li><strong>全面安全加固</strong>：
<ul>
<li>生产模式隐藏错误信息（<code>display_errors=0</code>），错误统一写入 <code>data/php-error.log</code>，不再向访客暴露路径与堆栈；</li>
<li>全站安全响应头：<code>X-Content-Type-Options: nosniff</code>、<code>X-Frame-Options: SAMEORIGIN</code>（防点击劫持，不影响站内 iframe 预览）、<code>Referrer-Policy: same-origin</code>、<code>X-XSS-Protection</code>；</li>
<li>会话 Cookie 在 HTTPS 下自动启用 <code>Secure</code>（已有 HttpOnly + SameSite=Lax）；</li>
<li>「记住我」Token 改为<strong>数据库仅存 SHA-256 摘要</strong>（防数据库泄露后伪造登录凭证）；</li>
<li>上传文件名安全化：剔除路径分隔符/穿越片段/控制字符、限制 200 字符、去除首尾非法字符（<code>..\..\xxx</code> 类名字会被清理为安全文件名）。</li>
</ul></li>
<li><strong>全站版权注释</strong>：全部 36 个源码文件（PHP/JS/CSS/config.sample.php）标注作者与网站（作者：开心彩棉糖，网站：开心彩棉糖.cn）</li>
</ul>
<h3>v0.0.4（2026-10-26）</h3>
<ul>
<li>取消分享改为<strong>直接删除分享记录</strong>（原为软删除，仅置失效状态）</li>
<li>「我的分享」列表新增<strong>复制提取码</strong>按钮（仅对有提取码的分享显示）</li>
</ul>
<h3>v0.0.3（2026-10-26）</h3>
<ul>
<li>创建分享 / 修改分享弹窗的提取码输入框新增<strong>「随机生成」按钮</strong><br />
（<code>nd.randCode()</code>，6 位随机码，剔除 0/O/1/l/I 易混淆字符）</li>
</ul>
<h3>v0.0.2（2026-10-26）</h3>
<ul>
<li><strong>修复登录成功不跳转 Bug</strong>：登录页为独立页面、缺少 <code>#toastBox</code> 容器，<br />
<code>nd.toast()</code> 在 null 上调用 <code>appendChild</code> 抛异常，中断了成功回调中的跳转逻辑；<br />
<code>toast()</code> 现改为容器不存在时自动创建（登录/注册/安装等独立页面统一受益）</li>
<li>引入静态资源版本参数（<code>assets/*?v=版本号</code>），避免浏览器缓存旧文件导致修复不生效</li>
</ul>
<h3>v0.0.1（2026-10-26 初始版本）</h3>
<ul>
<li>对标蓝奏云的核心功能完整实现（详见《开发策划书.md》）：<br />
安装向导、账号系统（首用户为管理员）、文件夹管理、分片上传/断点/秒传、<br />
下载（Range）、文件/文件夹分享（提取码/有效期/二维码/访问下载计数）、<br />
在线预览（图片/文本/PDF/音视频）、回收站、ZIP 打包、搜索排序、多选批量、<br />
暗色主题、管理后台（用户/设置/日志）、操作日志、登录防爆破、<br />
扩展名白名单 + 物理文件哈希重命名防脚本执行</li>
<li>落实项目约束：<strong>全站不使用原生弹窗、全站使用无感刷新</strong></li>
<li>本地全流程实测并修复 5 个 Bug：安装期常量未加载、lastId() 取到日志表 ID、<br />
回收站彻底删除时物理文件不释放（引用计数顺序错误）、compact() 未定义变量 Notice、<br />
拖拽类型检测逻辑恒真</li>
<li>文件移动升级为目录树选择器，拒绝移动到不存在目录/自身子孙</li>
</ul>
<hr />
<h2>四、版本与交付约定</h2>
<ul>
<li>版本号规则：每次功能/修复迭代自动 <code>+0.0.1</code>（当前 v0.0.4）</li>
<li>交付物为<strong>全量 zip</strong>（不打增量包），不包含 <code>config.php</code>（保留 <code>config.sample.php</code>），不包含运行时数据</li>
<li>本地测试环境：PHP 7.3 内置服务器运行于 <code>http://127.0.0.1:8123</code>（docroot 指向 <code>public/</code>）</li>
</ul>]]></description>
    <pubDate>Mon, 26 Oct 2026 22:56:24 +0800</pubDate>
    <dc:creator>开心彩棉糖</dc:creator>
    <guid>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/18.html</guid>
</item>
<item>
    <title>随机小姐姐源码</title>
    <link>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/17.html</link>
    <description><![CDATA[<h1><a href="https://"><img src="https://xn--h0t0irjt23akiz.cn/content/uploadfile/202610/3f301792309480.jpeg" alt="" /></a></h1>
<h1>随机小姐姐 · 随机短视频站<br />
项目说明 · 部署指南 · 使用手册<br />
（后端 PHP 7.3+ / SQLite / 前端 H5 自适应，与当前源码完全一致）</h1>
<p>────────────────────────────────────────────────────────<br />
目录<br />
一、项目简介<br />
二、技术栈与环境要求<br />
三、目录结构<br />
四、部署步骤<br />
五、后台使用说明<br />
六、前台播放页使用说明<br />
七、接口体系与自动适配<br />
八、数据存储、存档与备份<br />
九、维护命令（CLI / 定时任务）<br />
十、安全机制<br />
十一、常见问题（FAQ）<br />
十二、配置速查表<br />
十三、功能迭代记录<br />
────────────────────────────────────────────────────────</p>
<p>════════════════════════════════════════════════════════<br />
一、项目简介<br />
════════════════════════════════════════════════════════</p>
<p>「随机小姐姐」是一个自动抓取并随机播放小姐姐短视频的 H5 自适应站点：</p>
<ul>
<li>由接口驱动：调用多路随机小姐姐视频 API 获取视频地址，校验可播放后自动入库，<br />
永不空手播放；全部接口不可用时自动回退到本地已保存的视频链接。</li>
<li>自动增长：访问站点即自动补抓，视频库持续扩充（SQLite 主存 + TXT 存档双保险）。</li>
<li>抖音风格沉浸式播放：强制内置 H5 播放器、屏蔽浏览器原生播放器与嗅探悬浮球，<br />
支持自动连播、全屏、隐藏按钮、手势操作、30 分钟防重播。</li>
<li>接口自愈：后台 4 小时自动自检接口可用性，发现失效自动切换；<br />
新增接口一键&quot;自动分析&quot;自适应其返回结构，无需手工配置字段。</li>
<li>防抓取：页面令牌 + IP 频率限制，拦截第三方下载工具批量抓取，保护带宽与视频资源。</li>
</ul>
<p>适用场景：个人兴趣站、演示站、学习项目。请遵守接口使用条款与相关平台规则，<br />
不用于违法用途。</p>
<p>════════════════════════════════════════════════════════<br />
二、技术栈与环境要求<br />
════════════════════════════════════════════════════════</p>
<p>后端语言   PHP 7.3 及以上（实测 7.3/7.4/8.x 均可；需确认已启用 curl 扩展）<br />
数据库     SQLite（无需安装 MySQL；PHP 需启用 PDO_SQLITE 扩展）<br />
前端       H5 原生自适应（无框架，无构建步骤）<br />
服务器     Apache / Nginx / IIS 均可，也可用 PHP 内置服务器临时跑<br />
依赖扩展   必须：PDO、PDO_SQLITE、JSON、hash<br />
建议：curl（抓取接口用；未启用时自动降级为 file_get_contents，<br />
但需 allow_url_fopen=On）<br />
操作系统   Windows / Linux / macOS 均可</p>
<p>════════════════════════════════════════════════════════<br />
三、目录结构<br />
════════════════════════════════════════════════════════</p>
<p>随机小姐姐/<br />
├─ index.php                前台播放页（H5 自适应，抖音风格）<br />
├─ admin.php                后台管理面板（总览/视频库/抓取/巡检/设置/日志）<br />
├─ api.php                  前台与后台的全部 JSON 接口<br />
├─ fetch.php                维护脚本（抓取/巡检/存档/统计/全网搜接口），CLI 与 URL 两用<br />
├─ config.php               站点配置文件（接口/视频库/站点行为/安全等）<br />
├─ 安装说明.txt             本说明文档<br />
├─ lib/                     核心类库<br />
│   ├─ bootstrap.php        公共引导：配置加载/数据库连接/令牌签发校验/频率限制<br />
│   ├─ DB.php               SQLite (PDO) 封装：建表/查询/视频库/设置项<br />
│   ├─ ApiClient.php        接口客户端：请求/重试/冷却/自动分析/适配规则/接口探测<br />
│   ├─ VideoValidator.php   视频地址校验：可播放性检查（体积/时长/HTTP状态）<br />
│   ├─ VideoStore.php       视频库存储：SQLite 主存 + videoN.txt 分片存档<br />
│   ├─ Library.php          业务逻辑：抓取入库/健康巡检/随机取片/统计/全网搜接口<br />
│   └─ Log.php              日志：单文件轮转（默认 2MB 上限）<br />
├─ static/<br />
│   ├─ css/style.css        前台样式<br />
│   └─ js/app.js            前台交互脚本<br />
├─ data/                    数据库目录（自动创建，含 .htaccess 防直读）<br />
│   └─ app.db               SQLite 数据库（videos/settings/play_log/fetch_log/<br />
│                           blacklist/admin_users 六张表）<br />
├─ video/                   视频地址存档目录（自动创建，含 .htaccess 防直读）<br />
│   ├─ video1.txt           视频地址存档分片 1（每文件最多 10000 条，一行一条）<br />
│   ├─ video2.txt           分片 2（跨万条自动新建）<br />
│   └─ ...                  （最多 9999 个分片文件）<br />
└─ logs/<br />
└─ app.log              运行日志（自动轮转）</p>
<p>数据库表说明：<br />
videos        视频索引：url(唯一)/首次与最近入库时间/播放数/收藏/失效标记/最后错误<br />
settings      配置覆盖值与运行态（接口密钥、备用接口、令牌、接口检测缓存、限频计数等）<br />
play_log      播放日志（url/ip/ua/时间）<br />
fetch_log     接口调用日志（时间/模式/接口返回码/结果）<br />
blacklist     失效视频黑名单（url/时间/原因）<br />
admin_users   后台管理员（用户名/密码hash/角色/注册时间）——第一个注册的即管理员</p>
<p>════════════════════════════════════════════════════════<br />
四、部署步骤<br />
════════════════════════════════════════════════════════</p>
<p>【4.1 全新安装】</p>
<ol>
<li>将全部源码上传到网站根目录（如 /www/wwwroot/你的域名/）。</li>
<li>确认 PHP 版本 ≥ 7.3，并已启用 pdo_sqlite、curl 扩展（见&quot;二&quot;）。</li>
<li>（可选）修改 config.php 中的接口密钥：<br />
'api' =&gt; array( 'key' =&gt; '你的骁拓云apikey' )<br />
文档附带密钥已填入；如失效请到接口控制台重新获取。备用接口地址也可在此修改。</li>
<li>浏览器访问：<br />
前台播放页  <a href="http://你的域名/">http://你的域名/</a>            （index.php）<br />
后台管理    <a href="http://你的域名/admin.php">http://你的域名/admin.php</a></li>
<li>首次打开 admin.php 时显示「注册后台管理员」：<br />
★ 系统没有内置管理员账号，第一个注册的账号自动成为后台管理员；<br />
注册完成后注册入口自动关闭，之后只能凭该账号登录。<br />
（后台「设置」页可随时修改用户名/密码）</li>
<li>首次访问前台时程序会自动调用接口→校验视频可播放→写入 video/video1.txt；<br />
之后每次访问都会自动补抓，库存持续增长。</li>
</ol>
<p>【4.2 目录与伪静态（可选）】</p>
<ul>
<li>data / video / logs 目录由程序自动创建并写入 .htaccess（Require all denied），<br />
Apache 下自动生效；</li>
<li>Nginx 下如未使用 .htaccess，请自行在配置中拒绝访问这三个目录，例如：<br />
location ~ ^/(data|video|logs)/ { deny all; }</li>
<li>本程序为原生 PHP，无需伪静态规则；所有页面均可直接访问。</li>
</ul>
<p>【4.3 老版本升级（从旧包替换）】</p>
<ul>
<li>只替换程序文件（config.php、<em>.php、lib/、static/），<br />
保留 data/app.db、video/</em>.txt、logs/ 不动，数据库表结构自动增量升级<br />
（新增表/新字段自动创建，已有数据不受影响）。</li>
<li>升级后后台登录方式变为&quot;注册制&quot;：若旧库没有管理员，首次打开 admin.php<br />
注册第一个账号即可成为管理员。</li>
</ul>
<p>【4.4 运行检查清单】<br />
□ 前台能播放视频（接口正常时提示&quot;接口正常&quot;）<br />
□ 后台能注册/登录<br />
□ data/app.db 与 video/video1.txt 已生成且持续增长<br />
□ logs/app.log 有运行日志</p>
<p>════════════════════════════════════════════════════════<br />
五、后台使用说明<br />
════════════════════════════════════════════════════════</p>
<p>访问 /admin.php，登录（或首次注册）后进入后台。顶部导航共 6 个区：</p>
<p>【总览】</p>
<ul>
<li>三个接口统计：接口总数 / 接口可用 / 接口失效（缓存 10 分钟，打开秒显）</li>
<li>「重新检测接口」：立即全量重测全部接口（有视频地址返回即算正常）</li>
<li>「快速抓取」：立即抓取若干条视频入库</li>
<li>「重新生成 TXT 存档」「下载 TXT 存档(zip)」：见&quot;八&quot;</li>
<li>站点统计：库存总数/今日播放/总播放/收藏/失效/数据库大小</li>
<li>「接口自动分析」：填写新接口地址（可带密钥/密钥参数名，均可不填）<br />
点「自动分析」→ 程序自动请求该接口、递归分析整个返回结构、定位视频字段，<br />
给出建议字段路径 → 可「加入轮换队列」或「仅保存适配规则」。<br />
★ 已入库接口在播放时也会自动适配（规则快路径→常见字段→全量递归），<br />
&quot;测试通过即自动生成适配规则&quot;，无需手工配置。</li>
</ul>
<p>【视频库】</p>
<ul>
<li>库存列表（支持翻页/搜索），可下载 TXT 存档、一键重新生成存档</li>
<li>收藏统计、失效标记、手动解除黑名单</li>
</ul>
<p>【抓取】</p>
<ul>
<li>「手动抓取」：指定条数立即从接口抓取并校验入库（可同时抓取多条）</li>
<li>「全网搜索随机小姐姐API接口」：<br />
输入关键字 → 自动遍历 Bing/百度/360/搜狗/头条/DuckDuckGo 六大搜索引擎<br />
搜索&quot;随机小姐姐接口&quot;类页面 → 提取候选接口地址（自动反解各引擎跳转、<br />
教程页自动挖深层接口）→ 逐条一键测试（约 8 秒/条）→<br />
可用的自动入库为备用接口（加入轮换队列）。<br />
★ 判定口径：接口返回能提取到视频地址即正常（JSON 任意字段/文本直链/MP4 直出）；<br />
普通网页/文章页自动跳过；已知服务商自动尝试 ?type=json / ?type=mp4 变体。<br />
★ 搜索引擎索引的公开接口大多已失效或需密钥，单次可用数可能为 0，<br />
定位为&quot;发现新接口&quot;，与「接口自动分析」互补，多换关键词、多次搜索逐步积累。<br />
命令行：php fetch.php apisearch 关键字 [测试条数]</li>
</ul>
<p>【巡检】</p>
<ul>
<li>「健康巡检」：随机抽查库存视频重新校验，失效自动拉黑并从播放队列剔除</li>
<li>黑名单管理：查看/解除</li>
</ul>
<p>【设置】</p>
<ul>
<li>站点标题</li>
<li>接口密钥 apikey</li>
<li>备用接口地址（每行一个；格式：接口地址 或 接口地址|密钥|密钥参数名，<br />
密钥不强制填写，默认以 apikey 参数附加）</li>
<li>自动补抓开关 / 补抓间隔（秒）/ 每次补抓条数</li>
<li>最小视频体积（字节，默认 51200，防 404/空文件入库）</li>
<li>失效上报间隔（秒/IP，默认 10，防刷）</li>
<li>管理员账号（修改当前管理员的用户名/密码，留空表示不修改）</li>
<li>定时任务令牌（fetch.php URL 方式调用时使用）<br />
★ 设置保存后写入数据库覆盖默认配置，修改立即生效，无需改 config.php</li>
</ul>
<p>【日志】</p>
<ul>
<li>最近 200 行运行日志，支持刷新/清空</li>
</ul>
<p>★ 接口自检策略（重要）：<br />
后台打开总览时若距上次检测超过 4 小时自动补检（默认 api_check_interval=14400 秒）；<br />
定时任务调用 fetch.php 时同样顺带自检。自检期间置&quot;检测中&quot;标志，<br />
前台取视频直接播放本地缓存，用户无感等待，不影响前台播放。</p>
<p>════════════════════════════════════════════════════════<br />
六、前台播放页使用说明<br />
════════════════════════════════════════════════════════</p>
<p>访问 / 即进入播放页。布局参照抖音播放界面，全屏沉浸式。</p>
<p>【按钮（右侧竖排）】<br />
声音   单击开启/静音（初始静音以自动播放，首次点击后保持声音）<br />
收藏   收藏当前视频（双击画面也有爱心收藏动画）<br />
换一个 立即切换下一条（上滑手势等效）<br />
连播   自动连播开关：开启后每条视频完整播放完才自动切下一条；<br />
若视频加载失败或超过 5 秒未开始播放，自动切换下一条<br />
全屏   进入/退出全屏（手机端、电脑端均可用）<br />
隐藏   隐藏全部按钮（纯净观看）；再次点击（隐藏后仅剩一个小圆点）恢复显示</p>
<p>【手势】<br />
单击画面        播放 / 暂停<br />
双击画面        收藏（爱心动画）<br />
上滑            下一个<br />
下滑            上一个<br />
（本地缓存模式下上滑/下滑在最近播放记录中切换）</p>
<p>【防重复播放（30 分钟窗口）】</p>
<ul>
<li>同一视频链接 30 分钟内只播放一次（config 的 repeat_window=1800 秒可调）；</li>
<li>记录与判断在用户浏览器（localStorage）完成，服务器不保存用户状态，<br />
仅接收前端传来的&quot;近期已播地址&quot;做排除（最多 30 条）→ 节省服务器资源；</li>
<li>前端本地二次校验：即使服务端返回近期已播链接也会自动换源（最多尝试 5 次）；</li>
<li>服务端遇到命中排除列表的地址会自动重取（最多重取 2 次）。</li>
</ul>
<p>【加载与容错】</p>
<ul>
<li>视频加载超过 5 秒（load_timeout）自动切换下一条；</li>
<li>播放失败自动上报并换源（单次最多换 3 次，max_switch）；</li>
<li>播放失败上报有 IP 频率限制（10 秒/次），防止恶意刷库。</li>
</ul>
<p>【播放器特性（内置 H5 播放器）】</p>
<ul>
<li>完全屏蔽浏览器原生播放器：视频标签永不显示控制条，禁用原生下载/全屏/倍速/投屏按钮；</li>
<li>移动端强制内联播放（playsinline / x5-playsinline），微信/QQ X5 内核强制走 H5 播放；</li>
<li>禁用画中画（disablepictureinpicture）与投屏（disableRemotePlayback）；</li>
<li>手机端各浏览器（微信/QQ/夸克/UC/抖音内置浏览器等）已加适配 meta。<br />
★ 说明：UC/夸克等国产浏览器自带的&quot;视频嗅探/下载悬浮球&quot;属于浏览器自身界面，<br />
网页代码无法完全移除；本站已屏蔽播放器内全部下载入口，<br />
如需彻底关闭悬浮球，可在对应浏览器&quot;设置-通用-视频播放&quot;中关闭。</li>
</ul>
<p>════════════════════════════════════════════════════════<br />
七、接口体系与自动适配<br />
════════════════════════════════════════════════════════</p>
<p>【接口组成】</p>
<ol>
<li>主接口：骁拓云随机小姐姐<br />
<a href="https://api.xiaotuo.net/api.php?act=Api_send&amp;id=86&amp;apikey">https://api.xiaotuo.net/api.php?act=Api_send&amp;id=86&amp;apikey</a>=&lt;密钥&gt;<br />
返回 code=200 + data=视频地址；code=201 表示当日配额耗尽</li>
<li>备用接口（默认 5 条，可在后台/配置文件增删，一行一个）：<br />
<a href="http://api.xcvts.cn/api/video/ks_xjj?apiKey=...&amp;type=json">http://api.xcvts.cn/api/video/ks_xjj?apiKey=...&amp;type=json</a><br />
<a href="http://api.guiguiya.com/api/video/ksxjj?apiKey=...&amp;type=json">http://api.guiguiya.com/api/video/ksxjj?apiKey=...&amp;type=json</a><br />
<a href="https://api.qzqi.com/api/v1/DyRandomVideo">https://api.qzqi.com/api/v1/DyRandomVideo</a><br />
<a href="https://api.qzqi.com/api/v1/Randclip?type=json">https://api.qzqi.com/api/v1/Randclip?type=json</a><br />
<a href="https://api.kuleu.com/api/MP4_xiaojiejie?type=json">https://api.kuleu.com/api/MP4_xiaojiejie?type=json</a><br />
格式：接口地址 或 接口地址|密钥|密钥参数名（密钥不强制，默认参数名 apikey）</li>
<li>自定义接口：后台「接口自动分析」一键分析入库 / 「全网搜索接口」自动搜到入库，<br />
全部自动纳入轮换与检测，无需改代码。</li>
<li>本地缓存：主接口与所有备用接口均不可用时，自动播放本地已保存的视频链接。</li>
</ol>
<p>【调用与容错】</p>
<ul>
<li>接口随机轮换 + 冷却：同一接口两次调用至少间隔 cool_down=20 秒，<br />
冷却期内自动换其他接口或走本地缓存，防止单一接口访问过快被拉黑；</li>
<li>网络失败自动重试（retry=2，业务错误码不重试）；超时 10 秒；</li>
<li>全部接口失败 → 本地缓存兜底，前台永不停播。</li>
</ul>
<p>【返回结构自动适配（无需手工配置）】<br />
播放时对任意接口按三级提取视频地址：<br />
① 已保存适配规则（字段路径快提取）——含&quot;测试通过即自动生成&quot;的规则；<br />
② 常见字段：data / url / mp4_video / video_url / link / play_addr 等；<br />
③ 全量递归智能分析：遍历任意嵌套结构自动定位视频字段，并自动记住规则。<br />
兼容返回示例：<br />
{&quot;code&quot;:200,&quot;data&quot;:&quot;<a href="https://...mp4">https://...mp4</a>&quot;}<br />
{&quot;code&quot;:200,&quot;mp4_video&quot;:&quot;<a href="https://...mp4">https://...mp4</a>&quot;}<br />
{&quot;success&quot;:true,&quot;video_url&quot;:&quot;<a href="https://...mp4">https://...mp4</a>&quot;}<br />
{&quot;code&quot;:1,&quot;data&quot;:{&quot;link&quot;:&quot;<a href="https://...mp4">https://...mp4</a>&quot;}}</p>
<p>【接口自检】</p>
<ul>
<li>后台/定时任务每 4 小时自动检测全部接口一次（api_check_interval 可调）；</li>
<li>判定口径：接口返回能提取到视频地址即算正常；</li>
<li>检测结果缓存（api_status_cache），后台总览秒显&quot;接口总数/可用/失效&quot;；</li>
<li>自检期间前台直接播放本地缓存，不影响观看。</li>
</ul>
<p>════════════════════════════════════════════════════════<br />
八、数据存储、存档与备份<br />
════════════════════════════════════════════════════════</p>
<p>【双存储设计】</p>
<ul>
<li>主存储：SQLite（data/app.db 的 videos 表），用于播放/去重/统计/收藏/失效管理；</li>
<li>存档：video/video1.txt 等文本分片，一行一条视频地址，每文件最多 10000 条，<br />
跨万条自动新建下一分片（video2.txt、video3.txt…）；<br />
接口不可用时播放本地缓存的视频链接，即从这些存档读取。</li>
</ul>
<p>【下载 TXT 存档】</p>
<ul>
<li>后台「总览」或「视频库」→「下载 TXT 存档」→ 一键打包全部分片为 zip 下载；</li>
<li>接口：api.php?action=admin_download_txt（需后台登录会话）。</li>
</ul>
<p>【重新生成 / 导入】</p>
<ul>
<li>重新生成存档：后台按钮 或 php fetch.php export（以数据库为准重建全部分片）；</li>
<li>从存档导入：php fetch.php import（数据库丢失后用 TXT 恢复视频库）。</li>
</ul>
<p>【备份建议】<br />
定期备份 data/app.db + video/*.txt 即可完整保留库存；<br />
两者任一存在都能恢复播放（TXT→import 导入数据库；数据库→export 重建存档）。</p>
<p>【日志】<br />
logs/app.log 单文件轮转，默认上限 2MB，超出自动改名保留旧档。</p>
<p>════════════════════════════════════════════════════════<br />
九、维护命令（CLI / 定时任务）<br />
════════════════════════════════════════════════════════</p>
<p>【命令行（服务器 SSH / Windows 命令行）】<br />
cd 网站根目录<br />
php fetch.php fetch 10        抓取 10 条视频并校验入库（跨万条自动导出 TXT）<br />
php fetch.php health 20       巡检 20 条库存视频，失效自动拉黑<br />
php fetch.php export          以数据库为准重新生成全部 TXT 存档<br />
php fetch.php import          从 TXT 存档导入数据库（数据库丢失后恢复）<br />
php fetch.php stats           输出站点统计<br />
php fetch.php apitest         测试接口连通性（打印来源与地址）<br />
php fetch.php apisearch 关键字 [N]   各搜索引擎全网搜索随机小姐姐API接口，<br />
测试可用后自动入库（N=最多测试条数，默认10）</p>
<p>【URL 方式（定时任务/宝塔计划任务，需 token）】<br />
<a href="http://你的域名/fetch.php?do=fetch&amp;n=10&amp;token=你的cron_token">http://你的域名/fetch.php?do=fetch&amp;n=10&amp;token=你的cron_token</a><br />
<a href="http://你的域名/fetch.php?do=health&amp;n=20&amp;token=你的cron_token">http://你的域名/fetch.php?do=health&amp;n=20&amp;token=你的cron_token</a><br />
<a href="http://你的域名/fetch.php?do=export&amp;token=你的cron_token">http://你的域名/fetch.php?do=export&amp;token=你的cron_token</a><br />
有效 do：fetch / health / export / import / stats / apitest / apisearch<br />
★ token 默认 xiaojiejie2026，请到后台「设置」页或 config.php 修改；<br />
URL 方式也接受已登录后台的会话（同机 cookie）。</p>
<p>【推荐定时计划（示例）】<br />
每小时    抓取 5 条：  php fetch.php fetch 5<br />
每天      巡检 30 条： php fetch.php health 30<br />
每 4 小时  接口自检：  （fetch.php 任意调用都会顺带自检，无需单独配置）</p>
<p>════════════════════════════════════════════════════════<br />
十、安全机制<br />
════════════════════════════════════════════════════════</p>
<p>【后台账号（注册制，无内置密码）】</p>
<ul>
<li>系统无内置管理员；第一个注册的账号自动成为后台管理员（bcrypt 加密存 SQLite）；</li>
<li>注册后入口自动关闭；忘记密码时清空 data/app.db 的 admin_users 表即可重新注册<br />
（不影响视频库存）；</li>
<li>后台所有接口（api.php?action=admin_*）均校验登录会话。</li>
</ul>
<p>【页面访问令牌（防第三方下载工具批量抓取）】</p>
<ul>
<li>播放页签发 HMAC 签名令牌：token = 会话|IP|时间窗|签名；</li>
<li>取视频接口必须携带令牌：签名一致 + IP 一致 + 会话一致 + 时间窗（当前/前一窗）有效；</li>
<li>第三方工具直接请求接口拿不到令牌 → 拒绝；令牌无法伪造、无法跨会话复用；</li>
<li>开关与参数：config.php → site.page_token（enabled / window=600 / rate_max=60）。</li>
</ul>
<p>【IP 频率限制】</p>
<ul>
<li>每 IP 每分钟取视频最多 60 次（rate_max），超限返回 429；</li>
<li>播放失败上报每 IP 至少间隔 bad_report_min=10 秒；</li>
<li>限频计数存数据库，过期自动清理。</li>
</ul>
<p>【目录防直读】</p>
<ul>
<li>data / video / logs 目录自动写入 .htaccess（Require all denied）；</li>
<li>Nginx 环境请按&quot;4.2&quot;自行配置 deny。</li>
</ul>
<p>【其他】</p>
<ul>
<li>Web 环境不输出 PHP 错误详情（display_errors=Off）；</li>
<li>apikey、密钥等仅存服务器端，不暴露给前端；</li>
<li>定时任务令牌与后台会话分离，URL 调用必须携带 token。</li>
</ul>
<p>════════════════════════════════════════════════════════<br />
十一、常见问题（FAQ）<br />
════════════════════════════════════════════════════════</p>
<p>Q: 全站一直提示&quot;网络异常&quot;，但页面能打开？<br />
A: 优先检查 PHP curl 扩展是否启用（php -m 查看）。PHP 7.4 未装 curl 会出现<br />
全站取视频失败；安装 curl 扩展或改用 PHP 7.3 即可。</p>
<p>Q: 接口显示全部失效？<br />
A: 后台「总览」点「重新检测接口」立即全量重测；也可查看日志确认是网络层<br />
失败还是接口业务错误。备用接口可在后台「设置」中修改/增删。</p>
<p>Q: 后台登录不上？<br />
A: 后台没有内置账号：首次访问时先「注册后台管理员」，第一个注册的账号即管理员；<br />
忘记密码时清空 data/app.db 中 admin_users 表数据即可重新注册（不影响视频库存）。</p>
<p>Q: 库存一直不增长？<br />
A: 检查 config.php 的 api.key 是否有效（当日配额耗尽会返回 code=201）；<br />
确认自动补抓开关开启（site.auto_fetch=true / 后台可改）；<br />
也可手动「快速抓取」或 php fetch.php fetch 10。</p>
<p>Q: 某些视频播放黑屏/无声？<br />
A: 接口返回的部分视频源可能跨域/失效，程序会自动校验入库并定期巡检拉黑；<br />
播放失败会自动换源（最多 3 次）。声音问题：初始静音是浏览器自动播放策略，<br />
首次点击后即有声；若仍无声，可先「换一个」。</p>
<p>Q: 手机上看有浏览器自带的下载悬浮球？<br />
A: 那是浏览器自身界面（UC/夸克等的视频嗅探），网页无法移除；<br />
已屏蔽播放器内全部下载入口，可在浏览器设置中关闭悬浮球功能。</p>
<p>Q: 接口返回格式很怪，能适配吗？<br />
A: 能。播放时自动三级适配（规则→常见字段→全量递归），也可在后台<br />
「接口自动分析」输入地址一键分析并保存适配规则。</p>
<p>Q: 要不要装 MySQL / Redis / 伪静态？<br />
A: 都不需要。SQLite 已内置；无伪静态依赖。</p>
<p>Q: 如何更新版本？<br />
A: 替换程序文件（config.php、*.php、lib/、static/），保留 data/ video/ logs/；<br />
数据库自动增量升级，原有数据不丢。</p>
<p>Q: 如何彻底关闭后台？<br />
A: 删除 admin.php 与 api.php 中 admin_* 分支，或仅通过服务器权限限制<br />
/admin.php 与 /api.php 访问；前台 index.php 不受影响。</p>
<p>════════════════════════════════════════════════════════<br />
十二、配置速查表<br />
════════════════════════════════════════════════════════</p>
<p>修改 config.php 后保存即生效；后台「设置」保存的项以数据库覆盖值为准。</p>
<p>api.url                 主接口地址<br />
api.key                 主接口密钥（后台可改）<br />
api.backup_urls         备用接口列表，每行：地址 或 地址|密钥|密钥参数名<br />
api.engine_search_sources  全网搜索接口的搜索引擎源（平台名|URL模板，{kw} 占位）<br />
api.timeout             请求超时（秒）默认 10<br />
api.retry               网络失败重试次数 默认 2<br />
api.cool_down           单接口冷却（秒）默认 20<br />
api.ssl_verify          HTTPS 证书校验，默认 false（部分服务器无 CA）<br />
video.dir               存档目录 默认 video<br />
video.max_per_file      每 TXT 分片最大条数 默认 10000<br />
video.min_size          最小视频体积（字节）默认 51200<br />
video.probe_bytes       校验探测字节数 默认 65536<br />
video.check_timeout     校验超时（秒）默认 12<br />
db.path                 SQLite 路径 默认 data/app.db<br />
log.dir / log.max_size / log.filename   日志 默认 logs/app.log / 2MB<br />
site.title / subtitle   站点标题/副标题（后台可改）<br />
site.auto_fetch         自动补抓开关 默认 true（后台可改）<br />
site.auto_fetch_interval 补抓间隔（秒）默认 1800（后台可改）<br />
site.auto_fetch_count   每次补抓条数 默认 2（后台可改）<br />
site.bad_report_min     失效上报间隔（秒/IP）默认 10（后台可改）<br />
site.max_switch         单次换源上限 默认 3<br />
site.repeat_window      防重播窗口（秒）默认 1800（30 分钟，用户设备校验）<br />
site.load_timeout       加载超时切换（秒）默认 5<br />
site.api_check_interval 接口自检间隔（秒）默认 14400（4 小时）<br />
site.page_token         页面令牌：enabled=true / window=600 / rate_max=60<br />
admin.password          （已废弃，后台无内置密码；首个注册者即管理员）<br />
admin.cron_token        定时任务令牌 默认 xiaojiejie2026（后台可改）<br />
http.user_agent         请求 UA<br />
http.referer            请求 Referer（可留空）</p>
<p>════════════════════════════════════════════════════════<br />
十三、功能迭代记录<br />
════════════════════════════════════════════════════════</p>
<p>v1  基础版：主接口抓取、SQLite 存储、TXT 分片存档（每文件≤1万条）、<br />
PHP 7.3 + H5 自适应</p>
<ul>
<li>高效存储：SQLite 主存 + TXT 分片双保险</li>
<li>防重播：30 分钟窗口，用户设备(localStorage)校验，节省服务器资源</li>
<li>自动连播：每条完整播放完才切换下一个</li>
<li>抖音风格播放界面 + 强制内置 H5 播放器，屏蔽浏览器原生播放器</li>
<li>修复无声问题（初始静音策略 + 首次点击开声）</li>
<li>后台下载生成 TXT 存档（zip 打包）</li>
<li>多接口体系：主接口 + 5 备用 + 自定义；随机轮换 + 冷却防拉黑；<br />
全部失效回退本地缓存</li>
<li>Token 限制 + IP 频率限制：拦截第三方下载工具批量抓取</li>
<li>新增备用接口（xcvts / guiguiya / qzqi×2 / kuleu），密钥可空可配</li>
<li>后台总览显示接口总数/可用/失效 + 一键检测</li>
<li>一键检测规则：有视频地址返回即正常；新增接口自动适配</li>
<li>电脑端全屏按钮（后补手机端也显示）</li>
<li>隐藏按钮（隐藏/恢复全部按钮）；缩小手机端按钮</li>
<li>加载超时 5 秒自动切换；手机端各浏览器适配，屏蔽嗅探悬浮球</li>
<li>去除前台列表与分享按钮</li>
<li>接口自动分析：返回数据自动适配匹配规则</li>
<li>接口自检：4 小时一次，自检期间播放本地缓存，不影响前台</li>
<li>全网搜索接口：六大搜索引擎搜索→提取→测试→入库（一键）</li>
<li>接口测试通过即自动生成适配规则</li>
<li>移除采集功能（批量导入/关键字抓取/平台解析/博主主页合集解析）</li>
<li>后台管理员改为注册制：第一个注册的账号即后台管理员（无内置密码）</li>
</ul>
<p>================================================================================</p>]]></description>
    <pubDate>Sun, 18 Oct 2026 15:41:54 +0800</pubDate>
    <dc:creator>开心彩棉糖</dc:creator>
    <guid>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/17.html</guid>
</item>
<item>
    <title>[投稿]游客投稿UBB语法全量使用说明</title>
    <link>https://xn--h0t0irjt23akiz.cn/xianliaozatan/14.html</link>
    <description><![CDATA[<p>欢迎使用甜橙UI模板的游客投稿功能，投稿支持以下常用UBB标签，排版效果如下：</p>
<p>[b]这是加粗显示的文字[/b]，用来突出重点内容<br />
[i]这是斜体显示的文字[/i]，用来标注说明内容<br />
[u]这是带下划线的文字[/u]，用来标记重点<br />
[s]这是带删除线的文字[/s]，用来表示内容已删除</p>
<p>[h1]这是文章大标题[/h1]<br />
[h2]这是文章小标题[/h2]</p>
<p>[quote]这是一段引用内容，当你需要引用他人发言或者参考资料时，可以使用这个标签，内容会自动渲染成引用块样式。[/quote]</p>
<p>[code]// 这是一段示例代码，使用代码标签包裹后会等宽显示<br />
function hello() {<br />
console.log(&quot;欢迎来到开心彩棉糖&quot;);<br />
}[/code]</p>
<p>[color=red]这是红色文字[/color]，[color=blue]这是蓝色文字[/color]，用来给重点内容标注颜色</p>
<p>[center]这是一行居中显示的内容，适合作为小节说明[/center]</p>
<p>[url=<a href="https://xn--h0t0irjt23akiz.cn]点击这里可以跳转回网站首页[/url">https://xn--h0t0irjt23akiz.cn]点击这里可以跳转回网站首页[/url</a>]</p>
<p>[img=<a href="https://via.placeholder.com/700x300">https://via.placeholder.com/700x300</a>]</p>
<p>[video=<a href="https://www.w3schools.com/html/mov_bbb.mp4">https://www.w3schools.com/html/mov_bbb.mp4</a>]</p>
<p>[audio=<a href="https://www.w3schools.com/html/horse.mp3">https://www.w3schools.com/html/horse.mp3</a>]</p>
<p>[list]<br />
投稿前请确认内容符合网站规则<br />
转载内容请注明原作者和来源<br />
提交后文章需要管理员审核后才会公开展示<br />
[/list]</p>
<p>[hr]</p>
<p>以上就是游客投稿支持的全部常用UBB标签，大家写稿时可以直接在上方工具栏点击对应按钮插入标签，不需要手动记忆语法。</p>]]></description>
    <pubDate>Thu, 15 Oct 2026 16:28:20 +0800</pubDate>
    <dc:creator>游客投稿</dc:creator>
    <guid>https://xn--h0t0irjt23akiz.cn/xianliaozatan/14.html</guid>
</item>
<item>
    <title>甜橙UI的简介和更新记录</title>
    <link>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/9.html</link>
    <description><![CDATA[<h1>甜橙UI</h1>
<ul>
<li>模板名称：甜橙UI</li>
<li>版本：3.1.4</li>
<li>作者：开心彩棉糖</li>
<li>适用：EMLOG Pro</li>
</ul>
<h2>简介</h2>
<p>甜橙UI 是一款<strong>暖色手账风格</strong> EMLOG Pro 模板：</p>
<ul>
<li>米黄纸底 + 焦糖橘点缀的暖色手账配色</li>
<li>登录、注册、找回密码弹窗采用<strong>毛玻璃</strong>效果</li>
<li><strong>全设备响应式</strong>：小屏手机、标准手机、大屏手机、平板、桌面、超宽屏自动适配</li>
<li><strong>桌面端顶部导航横向展开</strong>：大屏时不再折叠为汉堡菜单，导航链接直接显示在顶栏右侧</li>
<li><strong>桌面端首页双列卡片网格</strong>：大屏浏览文章列表更高效</li>
<li><strong>首页文章卡片封面叠加效果</strong>（可选）：封面图作为整卡背景、文字信息叠加显示，卡片更窄更紧凑、一屏展示更多卡片，带悬停放大与渐变遮罩特效；文章未设置封面时自动取模板内置 16:9 封面图；后台「首页设置」可在「封面叠加 / 原有样式」间切换，并可设置首页每页显示的文章卡片数量（默认 10 篇、其余自动分页）</li>
<li><strong>搜索入口设置</strong>：后台「模板设置 - 首页设置」可开启/关闭搜索入口，并可选择位置——「顶部导航栏里」（默认，原样式不变）或「顶部导航栏下方」（在导航栏与轮播图之间显示独立搜索条）</li>
<li><strong>电脑端侧边栏</strong>（可选）：≥1024px 屏幕在内容区右侧显示博主信息、站点统计、最新文章、分类、标签云，手机端始终不显示</li>
<li>历史评论消息完整展示不截断，子评论缩进随屏幕宽度自适应</li>
<li>保留 EMLOG 完整功能：文章列表、详情、评论、搜索、页面、加密文章、轮播图等</li>
<li><strong>在线更新检测</strong>：模板后台自动检查新版本，支持一键下载更新包</li>
<li><strong>底部外链跳转确认</strong>：点击页脚 ICP/公安/友情链接等外部链接时弹出确认框，含风险提醒与免责说明</li>
<li><strong>手账导航页模板适配</strong>：页面模板与主模板共用顶部导航、底部信息、登录弹窗与深浅色主题，全站视觉一致</li>
<li><strong>文章版权与免责声明</strong>：每篇文章底部显示版权信息与免责声明（后台「文章页设置」独立开关与内容编辑）</li>
<li><strong>文章分享</strong>：文章底部「分享」按钮弹出分享窗，窗内生成一张含本文章链接二维码与文章简介的分享图，可一键保存；文章链接与内容不变时图片保持不变，内容变更自动重新生成；分享图顶部显示网站名，底部网址为中文域名时以中文显示</li>
<li><strong>评论 IP 归属地与运营商</strong>：前台评论区昵称旁显示评论 IP 的归属地与网络运营商（归属地以「国家·省份·城市」中文显示，常见运营商翻译为中文，本地网络显示「本地网络」）</li>
<li><strong>评论设备信息</strong>：每条评论内容底部显示评论者的操作系统名称及版本（如 Windows 10 / macOS 13 / Android 13）、浏览器及版本、机器品牌及型号（如 Apple iPhone / 小米 2312DRA50C，从系统 UA 读取，不读取浏览器设置）</li>
<li><strong>SEO 设置</strong>：后台「模板设置 - SEO设置」可独立设置站点浏览器标题、站点关键字、站点浏览器描述，以及文章/自建页面/微语三种页面的浏览器标题拼接方案；模板设置优先级高于 EMLOG 自带——设置了即覆盖 EMLOG 对应值，留空则完整沿用 EMLOG 原生行为</li>
</ul>
<h2>后台设置截图</h2>
<p><a href="https://"><img src="https://xn--h0t0irjt23akiz.cn/content/uploadfile/202610/06741791613150.jpeg" alt="" /></a><br />
<a href="https://"><img src="https://xn--h0t0irjt23akiz.cn/content/uploadfile/202610/cdde1791613189.jpeg" alt="" /></a><br />
<a href="https://"><img src="https://xn--h0t0irjt23akiz.cn/content/uploadfile/202610/dae31791613219.jpeg" alt="" /></a><br />
<a href="https://"><img src="https://xn--h0t0irjt23akiz.cn/content/uploadfile/202610/b6a91791613238.jpeg" alt="" /></a><br />
<a href="https://"><img src="https://xn--h0t0irjt23akiz.cn/content/uploadfile/202610/354e1791613265.jpeg" alt="" /></a><br />
<a href="https://"><img src="https://xn--h0t0irjt23akiz.cn/content/uploadfile/202610/75431791613286.jpeg" alt="" /></a></p>
<h2>安装</h2>
<ol>
<li>后台「外观 - 模板 - 安装模板」上传 <code>tiancheng_ui.zip</code></li>
<li>安装完成后点击「使用」</li>
<li>建议开启「模板设置」插件（tpl_options），在「首页设置」中配置轮播图</li>
</ol>
<h2>使用说明</h2>
<ul>
<li>首页轮播图：后台「模板设置 - 首页设置」，每行一条，格式：<code>图片地址 | 标题 | 跳转地址</code></li>
<li>顶部图片 LOGO：后台「模板设置 - 首页设置」，支持三种方式——点击上传图片文件、从媒体库选择、直接粘贴图片地址；设置后导航栏显示该图片并替换网站名称，留空则继续显示网站名称</li>
<li>电脑端侧边栏：后台「模板设置 - 首页设置」开启「电脑端侧边栏」，屏幕宽度 ≥1024px 时内容区右侧显示侧边栏（博主信息、站点统计、最新文章、分类、标签云）；手机端始终不显示</li>
<li>文章页设置：后台「模板设置 - 文章页设置」集中管理以下选项：
<ul>
<li><strong>文章版权与免责声明</strong>（开关 + 版权信息内容 + 免责声明内容，均留空则不显示区块）</li>
<li><strong>文章分享</strong>（开关；开启后文章底部显示「分享」按钮，点击弹出分享窗，窗内生成含文章链接二维码与简介的分享图，可保存；图片顶部显示网站名，底部网址为中文域名时以中文显示；链接与内容未变时图片保持不变，变更自动重新生成）</li>
<li><strong>评论显示IP归属地</strong>（开关；前台评论区昵称旁显示评论 IP 归属地与运营商，归属地以「国家·省份·城市」中文显示，常见运营商翻译为中文，本地网络显示「本地网络」）</li>
<li><strong>评论显示设备信息</strong>（开关；评论内容底部显示操作系统名称及版本、浏览器及版本、机器品牌及型号，从系统 UA 读取，不读取浏览器设置）</li>
</ul></li>
<li>SEO 设置：后台「模板设置 - SEO设置」：
<ul>
<li><strong>站点浏览器标题</strong>：浏览器标签页显示的站点标题，全站 <code>&lt;title&gt;</code> 与各标题方案中的「站点名」均优先使用此项；留空则沿用 EMLOG 后台设置的站点名称</li>
<li><strong>站点关键字</strong> / <strong>站点浏览器描述</strong>：分别覆盖全站 <code>&lt;meta name="keywords"&gt;</code> / <code>&lt;meta name="description"&gt;</code>；留空则沿用 EMLOG 后台设置</li>
<li><strong>文章 / 自建页面 / 微语浏览器标题方案</strong>：选择对应页面的浏览器标题拼接方式——默认（沿用 EMLOG）、标题-站点名、站点名-标题、仅标题、标题|站点名；模板方案优先级高于 EMLOG 自带</li>
</ul></li>
<li>页脚底部信息：后台「模板设置 - 底部设置」配置版权信息、ICP备案、公安网备案、友情链接、网站运行时间（各项可独立开关，内容留空则前台不显示；电脑端 ICP 与公安备案合并一行显示，手机端独立两行）</li>
<li>在线更新：后台「模板设置 - 更新检测」
<ul>
<li>填写「更新服务器地址」（默认 <code>https://xn--3ds015a01adz5d.xn--h0t0irjt23akiz.cn</code>）</li>
<li>填写「API 密钥」（更新服务器后台分类管理中的分类密钥），联系我进行添加</li>
<li>「站点域名」留空则自动使用当前访问域名，联系我进行添加</li>
<li>保存后每次进入模板设置页自动检测更新（结果缓存 10 分钟），也可点击「立即检测」手动检查</li>
<li>发现新版本后按页面提示下载更新包，再到「安装模板」处上传升级</li>
</ul></li>
</ul>
<h2>版本历史</h2>
<h3>v3.1.4</h3>
<p>--新增：游客投稿功能，无需登录即可投稿。<br />
--新增：游客投稿使用UBB标签编辑内容，有快捷键不用及代码。<br />
--使用说明--<br />
1、进入EMLOG后台--外观--页面--新建页面。输入页面标题，在页面模板处选择游客投稿页，其余默认即可，发布页面。<br />
2、进入EMLOG后台--外观--导航--添加页面导航。</p>
<p>经过以上两步即可把游客投稿显示在顶部导航栏。</p>
<h3>v2.8.8</h3>
<ul>
<li>优化：<strong>所有卡片阴影描边统一增强</strong>——文章卡片、侧边栏模块卡片、评论卡片、相邻文章卡片、导航页卡片、首页封面叠加卡片等全部统一升级为「双层阴影 + 主题描边」（阴影颜色由模板主色派生，自动跟随内置主题配色、自定义主色与深色模式；电脑端与手机端同时生效），卡片层次更清晰、手账质感更统一；首页封面叠加卡片采用外环描边（不占布局），悬停时阴影加深、卡片上浮</li>
<li>新增：为了保护模板不被恶意篡改新增<strong>版权互相印证机制</strong>——模板全部文件头部内置统一版权注释与每文件唯一签名（FILE-SIG），核心文件两两见证、全量文件指纹清单校验，任何文件、任何方式、任何代码改动（含删除或篡改版权注释）都会触发前台底部强制显示版权信息与版权网站跳转链接；代码未改动时前台不显示任何版权信息。检测代码隐藏部署、无特征命名，不加密 PHP 代码；版权内容：© 2026 甜橙UI · 开心彩棉糖 · 版权所有 + <a href="https://开心彩棉糖.cn（点击新窗口打开">https://开心彩棉糖.cn（点击新窗口打开</a>）</li>
</ul>
<h3>v2.8.7</h3>
<ul>
<li>修复：<strong>手机端首页文章卡片内文字显示不全</strong>——封面叠加模式（16:9 矮卡片）下，文章简介原缺少 <code>display:-webkit-box / -webkit-box-orient</code> 组合，<code>-webkit-line-clamp</code> 不生效，简介超长时溢出并被卡片裁切、文字显示不全；已补全截断组合，并按手机端矮卡容量重新分配：标题最多 2 行、简介 1 行、话题标签与「阅读全文」按钮完整显示，全部文字不再被裁</li>
<li>优化：<strong>手机端首页文章卡片间距</strong>——卡片之间统一拉开至 16px（原封面叠加模式 <code>margin-bottom:0</code> 导致手机端单列卡片紧贴无间距），视觉更舒展</li>
<li>优化：<strong>手机端首页最后一个卡片与页面底部分割线距离</strong>——最后一张卡片底部额外增加 28px 留白（与分页 / 页脚分割线之间不再贴紧）</li>
<li>优化：<strong>首页文章卡片黑色渐变减淡</strong>——封面底部黑色遮罩整体减淡（顶部 0.06→0.04、中部 0.2→0.12、底部 0.82→0.55，悬停态同步减淡），在保证白色文字可读的前提下画面更通透、封面图更清晰</li>
<li>安全加固：本轮改动全部为纯 CSS 样式调整与版本号更新，无新增输入输出面 / 数据库操作 / 外部请求；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单、IP 接口字面量校验），本轮无需重复加固</li>
<li>新增：<strong>首页每排卡片数量设置（电脑版两组独立）</strong>——后台「首页设置」新增两组互不干扰的列数设置（<strong>手机版固定单列显示，不提供设置</strong>）：
<ul>
<li><strong>首页每排卡片数量（电脑版·关闭侧边栏）</strong>：电脑端未开启侧边栏时每排卡片数，范围 1-4，默认 2；列数越多卡片越窄，模板自动压缩字号与间距（3 列：标题 15px、简介 1 行；4 列：标题 14px、隐藏简介与标签）</li>
<li><strong>首页每排卡片数量（电脑版·开启侧边栏）</strong>：电脑端开启侧边栏时每排卡片数，范围 1-4，默认 1；同理自动紧凑（2 列：标题 15px、简介 1 行；3/4 列：标题 14px、隐藏简介与标签）</li>
<li>两组设置分别保存、互不影响；未设置或非法值时回落各默认值，与原有显示完全一致（增量兼容，不破坏原有数据）</li>
</ul></li>
<li>新增：<strong>大屏模式（内容区满屏显示）</strong>——后台「首页设置 → 大屏模式（内容区满屏显示）」开关，开启后电脑端内容区不再受 960px 宽度限制、随屏幕宽度自适应满屏显示（≥1400px 时卡片间距放大至 24px、轮播图高度上限 560px 保持 16:9 裁切），关闭时保持原有居中限宽布局；仅影响电脑端（≥1024px），手机端不受影响</li>
<li>安全加固：新增 3 个后台设置项均为文本/单选并沿用既有标签体系；列数与大屏开关读取后经整型钳制（电脑 1-4）与布尔校验（wide 仅接受 1/y），非法值回落默认；渲染走既有全站输出转义；延续既有全部加固，本轮无需重复加固</li>
<li>测试：PHP 语法检查通过；本地实测多场景全部通过——①默认态（侧边栏开 + 1 列 + 非大屏）单列 576px、内容区 960px 与改动前完全一致；②开启侧边栏 + 2 列 + 大屏：双列 419px、内容区满屏；③关闭侧边栏 + 3 列 + 大屏：三列 380px、满屏 1239px（截图比对通过）；④手机 480px 视口：单列卡片、微语与轮播通栏同宽；后台设置页 3 项新选项（2 列数 + 1 大屏开关）全部正常渲染；测试数据已恢复默认值</li>
<li>调整：<strong>移除「首页每排卡片数量（手机版）」设置及相关功能</strong>——后台不再提供手机版列数设置，手机 / 平板端（&lt;1024px）首页文章卡片固定单列显示（与原有默认显示一致，无需任何操作）；后台设置页仅保留电脑版两组列数设置</li>
<li>修复：<strong>开启侧边栏且电脑端列数 ≥2 时搜索框被缩短</strong>——跨列规则（<code>grid-column:1/-1</code>）原只覆盖轮播/微语/分页/空态四类通栏模块，漏掉了导航栏下方搜索框（<code>.tui-search-hero</code>）与首页顶部条（<code>.tui-home-top</code>），列数 ≥2 时两者被并进单列变窄；已将两处通栏模块补入无侧边栏与开启侧边栏两组跨列规则；实测开启侧边栏 + 2 列时搜索框恢复 576px 全宽（与轮播图同宽，截图比对通过）</li>
<li>优化：<strong>微语显示宽度与轮播图始终一致</strong>——当页面宽度达不到显示侧边栏（手机 / 平板端 &lt;1024px，或电脑端关闭侧边栏）时，首页微语模块（<code>.tui-twitter</code>）与轮播图（<code>.tui-slider</code>）同属通栏模块（<code>grid-column:1/-1</code>），两者显示宽度始终一致，通栏整宽展示</li>
<li>测试/加固：<strong>全量源码 BUG 筛查</strong>——①PHP 语法检查 19/19 个文件 0 失败；②JS 语法检查 common.js / qrcode.min.js 通过；③危险函数扫描仅命中 jQuery 压缩库与选项反序列化（静默失败符，无害）；④SQL 注入面审计：侧边栏 SQL 表/字段/排序全白名单、微语分页 LIMIT 强转、SEO 优化模块 WHERE 经 SHOW COLUMNS 白名单拼装、导航数据走 JSON 文件无 SQL，均无用户输入进入 SQL；⑤XSS 输出面审计：header/footer/side/module/page_nav/404/page/pw/log_list/twitter_page 全部输出经 htmlspecialchars / esc() / json_encode(JSON_HEX_TAG) 转义；⑥鉴权审计：page_nav 增删改与升级入口均限管理员并校验同源 Referer、zip 魔数、路径穿越与文件数上限；⑦语言键审计：模板调用 206 个语言键 zh_CN / en_US 双语言零缺失；⑧前台实测首页/文章页/微语页/搜索页/404/后台设置页全部零 console 错误；未发现需修复的遗留 BUG</li>
</ul>
<h3>v2.8.6</h3>
<ul>
<li>
<p>新增：<strong>侧边栏日历模块节日 / 节气倒计时</strong>——日历卡片在原有时间流逝进度（今日 / 本周 / 本月 / 今年已过时长与百分比）下方新增「节日节气倒计时」区块：</p>
<ul>
<li>节日 = 公历节日（元旦 / 情人节 / 妇女节 / 植树节 / 愚人节 / 劳动节 / 青年节 / 儿童节 / 建党节 / 建军节 / 教师节 / 国庆节 / 圣诞节）+ 农历传统节日（春节 / 元宵节 / 端午节 / 七夕节 / 中秋节 / 重阳节 / 除夕），农历节日由模板内置农历算法（1900-2100 经典数据表）精确换算，闰月正确；</li>
<li>节气 = 二十四节气（小寒 / 大寒 / 立春 … 冬至，公历固定日期表）；</li>
<li>在今日起 400 天窗口内取最近事件，节日 / 节气各显示一条；今日命中显示「今日是 XX」，否则显示「距离 XX 还有 N 天」，倒计时天数逐日自动更新；</li>
<li>每个倒计时项带专属 emoji 图标（春节 🏮 / 端午 🛶 / 中秋 🥮 / 重阳 🍂 / 除夕 🧧 / 节气 🌿 等），今日命中高亮渐变，手账风格与模板配色一致</li>
</ul>
</li>
<li>
<p>新增：<strong>侧边栏日历农历显示</strong>——日历卡片顶部显示「今日农历」，含天干地支年（如丙午年）、中文农历月日（如九月初二）与生肖（如马年），农历日期逐日自动更新</p>
</li>
<li>
<p>调整：<strong>日历卡片名称改为「人生倒计时」</strong>——时间流逝进度 + 节日节气倒计时 + 农历三块内容统一归入「人生倒计时」卡片，主题更贴合手账生活模板定位</p>
</li>
<li>
<p>优化：<strong>时间流逝进度显示效果统一</strong>——「今日 / 本周 / 本月 / 今年」四项时间流逝进度由原「文字 + 进度条」改为与节日节气倒计时一致的卡片样式（emoji 圆底图标 + 文本 + 百分比），四行统一（⏰ 今日 / 📅 本周 / 📆 本月 / 🗓️ 今年），整卡视觉风格完全一致、更美观</p>
</li>
<li>
<p>调整：<strong>去除日历卡片右上角图标</strong>——「人生倒计时」标题右侧原蛋糕装饰图标移除，标题更简洁干净</p>
</li>
<li>
<p>调整：<strong>去除节日节气倒计时分割线与标题</strong>——倒计时区块的虚线分隔线与「节日节气倒计时」文字移除，节日 / 节气两项倒计时直接衔接在时间进度下方，卡片更简洁紧凑</p>
</li>
<li>
<p>安全加固：新增加载函数与日历区块输出均已通过 PHP 语法检查，农历算法经关键日期独立验算（春节 / 中秋 / 今日农历 / 重阳倒计时）正确无误</p>
</li>
<li>
<p>新增：<strong>首页文章卡片封面叠加效果（默认开启）</strong>——后台「首页设置 → 首页文章卡片显示效果」选择「封面叠加」时，封面图作为整张卡片背景，文章标题、置顶/原创/分类标签、简介、话题标签、阅读全文、作者时间、浏览评论全部叠加在封面图上显示（底部渐变遮罩保证文字可读），卡片更窄更紧凑、一屏可展示更多卡片；悬停时封面图缓慢放大（scale 1.07）、遮罩加深、卡片轻微上浮并加深阴影，手账风更生动；选择「原有样式」完全恢复封面在上、文字在下的原纵向卡片布局</p>
</li>
<li>
<p>新增：<strong>内置 16:9 封面图池</strong>——模板内置 8 张不同风格的 16:9 封面图（cover 目录）；文章未设置封面且开启「封面叠加」效果时，自动按轮转从内置图池取一张作为卡片背景，同页不重复，无封面文章也能呈现完整叠加卡片</p>
</li>
<li>
<p>新增：<strong>首页显示文章卡片数量设置</strong>——后台「首页设置 → 首页显示文章卡片数量」（默认 10，范围 1-50）控制首页每页显示的文章卡片数，其余文章自动分页显示（底部翻页按钮）；模板通过模板初始化钩子（plugins.php）把该数值同步到 EMLOG 内核首页查询条数（index_lognum），后台设置保存后前台立即生效，不破坏 EMLOG 原有数据</p>
</li>
<li>
<p>优化：<strong>卡片保持原布局宽度与修长比例</strong>——「封面叠加」模式下卡片左右宽度与原有样式完全一致：未开启侧边栏时保持双列网格、开启侧边栏时保持单列原宽，卡片高度按各自宽度恢复原来封面+文字的总高观感（双列约 370px、单列约 440px、手机端约 330px），不是缩窄变方的矮卡片；手机端始终单列</p>
</li>
<li>
<p>优化：<strong>侧边栏滚动机制</strong>——电脑端开启侧边栏后，首页/文章页主内容滚动时侧边栏实时跟随（sticky 吸附导航栏下方），侧边栏内容超过一屏时在侧边栏内部滚动（细滚动条、按主题配色），侧边栏滚到顶部/底部后停止滚动，主内容/文章内容继续滚动；首页与文章页、侧边栏显示在左/右侧均适用</p>
</li>
<li>
<p>安全加固：封面图地址输出沿用原 htmlspecialchars 转义；内置封面文件名来自固定目录 glob 结果（basename 白名单化，无用户输入进入 URL）；首页数量设置经整型强制转换与 1-50 范围钳制（非法值回退默认 10），同步写入走 EMLOG 官方 Option/Cache 接口；新增 plugins.php 钩子无任何外部请求；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单、IP 接口字面量校验），本轮无需重复加固</p>
</li>
<li>
<p>测试：PHP 语法检查全部通过；本地实测「封面叠加」桌面双列渲染（文字叠加+遮罩+内置封面）、切换「原有样式」恢复原布局、首页数量设为 2 篇时分页正常出现（1 2 3 »）、后台首页设置两项新选项正常渲染，全部截图比对通过；测试数据已恢复原状</p>
<h3>v2.8.5</h3>
</li>
<li>
<p>新增：<strong>电脑端侧边栏智能滚动机制</strong>——首页 / 文章页内容滚动时侧边栏实时跟随：</p>
<ul>
<li>页面顶部：侧边栏恢复正常流，顶部可见、随内容正常滚动；</li>
<li>滚动过导航线后，<strong>短侧边栏</strong>（一屏内放得下）切换为吸顶跟随（sticky top），滚动到侧边栏底部自然停止，主内容继续滚动；</li>
<li><strong>长侧边栏</strong>（超过一屏）切换为吸底跟随（sticky bottom），底部始终贴住视口底部实时跟随，侧边栏滚动到底（顶部到达父容器顶部边界）后停止跟随，首页 / 文章页内容继续滚动；</li>
<li>手机端（&lt;1024px 侧边栏不显示）不受影响；侧边栏内容动态变化（头像、微语等）自动校正位置</li>
</ul>
</li>
<li>
<p>优化：<strong>SEO 内容生成机制更智能</strong>——站点浏览器标题等生成更通顺、更利于搜索引擎收录：</p>
<ul>
<li>标题生成优先级：精炼的站点简介首句（≤24 字且不挤占标题空间）&gt; 主题词自然短语组合 &gt; 兜底文案；</li>
<li>主题词组合改为中文自然短语：2 个词用「A与B」，3 个及以上用「A、B、C等」顿号连接；3 词以上不加「的」避免「等 的」拗口（如「专注手账、旅行、美食等内容分享平台」）；</li>
<li>站点简介过长时不再硬拼进标题被截断成「…」，自动改用精炼的主题词短语；描述中简介与定位句主题重复时自动省略，避免「专注…分享站，这是一个专注…平台」类啰嗦；</li>
<li>主题词子串去重（如「旅行」被「旅行游记」覆盖时保留更长词条），站点关键字更精炼不冗余；</li>
<li>原有安全行为保持：敏感词替代保通顺、标题 ≤60 字 / 描述 ≤150 字句子级截断、关键字逗号边界截断</li>
</ul>
</li>
</ul>
<h3>v2.8.4</h3>
<ul>
<li>新增：<strong>全站中文网址（IDN/Punycode）转译显示</strong>——页面内所有可见文本中的中文域名（如 <code>xn--h0t0irjt23akiz.cn</code>）一律转译为中文显示（如 <code>开心彩棉糖.cn</code>），覆盖<strong>文章正文、评论内容、导航页小纸条名称与描述、跳转确认弹窗（站点名 / 链接 / 风险提示）、侧边栏、底部友情链接</strong>等任意位置；<strong>动态弹窗/动态内容（登录窗、图片预览等）通过自动监听实时转译</strong>；仅改显示文本，链接地址（href）保持原始 punycode 不变，跳转不受影响</li>
<li>修复：<strong>底部/外链跳转确认弹窗未转译</strong>——底部「即将离开本站」弹窗的站点名、链接地址、风险提示文案未做中文网址转译；根因是公共脚本为 defer 加载、页面底部内联脚本先于其执行，转译函数在脚本定义时尚未就绪而退化为原样输出；已改为点击弹窗时动态获取转译函数（与导航页弹窗同一机制），实测弹窗内链接与提示均显示中文域名</li>
<li>增强：<strong>动态转译监听器升级</strong>——MutationObserver 不再依赖 jQuery ready，改为脚本加载完成时立即挂载；覆盖三类动态写入：新增元素节点（整棵子树）、往已存在元素写 textContent（弹窗 open() 最常见写法）、文本节点原地修改（characterData）；登录/注册/找回密码弹窗、动态提示等任意新增或改写文本出现即自动转译，实测无 xn-- 残留</li>
<li>调整：文章分享图底部网址的中文域名显示逻辑复用全站转译（行为一致）；导航页（page_nav）动态生成的小纸条名称、描述与跳转确认弹窗文案同步支持中文网址转译</li>
<li>新增：<strong>模板 SEO 设置</strong>——后台「模板设置」新增独立「SEO设置」标签页，含 6 个设置项：<strong>站点浏览器标题</strong>（全站 <code>&lt;title&gt;</code> 与各标题方案中的「站点名」优先使用）、<strong>站点关键字</strong>、<strong>站点浏览器描述</strong>（覆盖全站 <code>&lt;meta name="keywords"&gt;</code> / <code>&lt;meta name="description"&gt;</code>）、<strong>文章浏览器标题方案</strong>、<strong>自建页面浏览器标题方案</strong>、<strong>微语浏览器标题方案</strong>（五种方案：默认沿用 EMLOG / 标题-站点名 / 站点名-标题 / 仅标题 / 标题|站点名）；模板设置优先级高于 EMLOG 自带——模板设置了即覆盖 EMLOG 对应值，未设置则完整沿用 EMLOG 原生行为，不影响原有 SEO</li>
<li>安全加固：新增后台 6 个设置项（3 个文本 + 3 个方案单选）——方案值经 header.php 白名单校验（仅允许 default/t1/t2/t3/t4，非法值按 default 处理）；站点标题/关键字/描述输出沿用原 <code>htmlspecialchars</code> 转义（ENT_QUOTES）；微语页标志仅写入全局内存变量、无外部请求/数据库操作；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单、IP 接口字面量校验），本轮无需重复加固</li>
<li>文档：模板说明（readme）与后台设置说明同步更新，版本号维持 2.8.4</li>
<li>修复：<strong>后台「SEO设置」标签只显示首个设置项</strong>——SEO 三个设置项的说明文案中写入了裸 <code>&lt;title&gt;</code> / <code>&lt;meta name="keywords"&gt;</code> / <code>&lt;meta name="description"&gt;</code> HTML 标签，渲染进选项说明后被浏览器当作真实标签解析，导致后续全部选项被吞入 <code>&lt;title&gt;</code> 文本节点而消失（页面标题同时被污染为超长 HTML 文本）；已将所有裸标签改为实体转义（<code>&amp;lt;title&amp;gt;</code> / <code>&amp;lt;meta name=&amp;quot;keywords&amp;quot;&amp;gt;</code> / <code>&amp;lt;meta name=&amp;quot;description&amp;quot;&amp;gt;</code>），中英文语言文件均已修复，实测后台 SEO 6 项与更新 API 3 项全部正常渲染</li>
<li>新增：<strong>SEO 一键优化（手动）</strong>——后台「SEO设置」标签新增「一键优化 SEO」按钮，点击后根据站点当前内容（站点名 / 站点简介 / 分类 / 标签 / 最新文章）自动生成并替换保存「站点浏览器标题 / 站点关键字 / 站点浏览器描述」，完成后自动返回 SEO 设置页</li>
<li>新增：<strong>SEO 自动优化（静默）</strong>——后台「SEO设置」新增「自动优化SEO」开关；开启后，前台访问时自动检测站点内容变化（文章 / 分类 / 标签 / 微语的数量与最新变化），内容发生变化时自动重新生成并替换保存上述 SEO 三项，全程静默无提示；关闭后自动优化不生效。手动一键优化与自动优化共用同一内容生成与保存逻辑</li>
<li>优化：<strong>一键优化完成后返回原设置入口</strong>——从「模板设置插件页」进入时返回插件页，从「外观→模板→设置」进入时返回该页，并在两种入口下自动切换到「SEO设置」标签（无 TplShow 时自动滚动到 SEO 设置区）</li>
<li>优化：<strong>「一键优化SEO」与「自动优化SEO」移动到「SEO设置」顶部</strong>，置顶展示便于操作</li>
<li>优化：<strong>浏览器标题方案文案与拼接改版</strong>——文章 / 自建页面 / 微语标题方案中原「站点名」统一改为对应模板 SEO 设置项：t1「标题 - 站点浏览器标题」、t2「标题 - 站点关键字」、t3「仅标题」、t4「标题 - 站点浏览器描述」，拼接内容与文案一致</li>
<li>优化：<strong>SEO 一键 / 自动优化生成内容改为「优化美化」</strong>——不再机械截取站点名 / 分类 / 标签 / 文章标题直接拼接，而是根据站点内容提炼主题定位：标题为「站点名 - 主题词组合内容分享」，关键字为主词 + 主题词 + 长尾组合（教程 / 攻略 / 分享 / 记录 / 生活，自动过滤「生活生活」类冗余），描述生成完整自然句（站点定位 + 简介 + 板块 + 最新内容 + 欢迎语），更易被搜索引擎收录</li>
<li>优化：<strong>SEO 生成内容敏感词自动替换</strong>——标题 / 描述 / 关键字生成时自动将「博客 / 部落格 / Blog」等敏感字样替换为「主页」（前导「的 / 之 / 和 / 与」原样保留），既避免敏感词、又保持语句通顺</li>
<li>新增：<strong>SEO 三项分项开关</strong>——「优化站点浏览器标题 / 优化站点关键字 / 优化站点浏览器描述」各自独立开关（默认开启）；关闭的项，一键优化与自动优化均不会重新生成与替换，保持原有内容不变；全部关闭时一键优化与自动优化不对 SEO 做任何改动</li>
<li>新增：<strong>SEO 生成内容字数限制</strong>——标题 ≤60 字、描述 ≤150 字、关键字 ≤150 字符；超长时智能截断：描述优先在中文句子标点边界截断保证语句通顺，标题 / 描述句内截断处追加省略号「…」，关键字按逗号边界保留完整词条，防止溢出又不失美观</li>
</ul>
<h3>v2.8.3</h3>
<ul>
<li>调整：<strong>主题设置标签</strong>——「主题配色」及自定义配色设置统一移入新增的「主题设置」标签页；「自定义配色」精简为只需选择<strong>一个自定义主色</strong>，页面背景、卡片、文字、强调色、分隔线、深色模式配色全部按内置配色机制（color-mix）自动生成，无需逐个调色，显示效果与内置主题完全一致</li>
<li>新增：<strong>内置配色扩充（6 款）</strong>——「主题配色」现提供 6 款配色（布局不变仅换配色）：<strong>经典暖色</strong>（默认，原米黄手账风格）、<strong>抹茶绿</strong>、<strong>薄荷蓝</strong>、<strong>樱花粉</strong>、<strong>柠檬黄</strong>、<strong>薰衣草紫</strong>；每款均含配套深色变体，深浅色切换在任意配色下正常生效；浏览器标签栏主题色（theme-color）随所选配色同步切换</li>
<li>新增：<strong>自定义配色（颜色选择器）</strong>——「主题配色」新增「自定义配色」选项，选择一个主色即可自动生成整套配色（页面背景、卡片、文字、强调色、分隔线、深色模式），默认值为抹茶绿系；所有色值经 #hex 白名单校验，非法值自动回退默认</li>
<li>新增：<strong>鼠标样式（箭头变形系列 10 款 · V2）</strong>——「主题设置」新增「鼠标样式」选择：<strong>跟随系统</strong>（默认，浏览器原生指针）及 <strong>10 款箭头变形手绘光标</strong>（PNG 图片，位于模板 cursor 目录，本地相对引用，无外部依赖，128px 超采样绘制保证小尺寸边缘圆润）：焦糖圆头箭头（圆润尖端+高光）、奶油厚边箭头（厚奶油描边）、抹茶叶形箭头（叶形翼尖+叶脉）、樱花花瓣箭头（三瓣花尖）、糖果拼色箭头（奶白+糖果粉拼块）、星星尖箭头（金星尖+星尘尾）、铅笔指针（整支铅笔造型）、荧光箭头（强多层光晕）、绿叶箭头（叶片轮廓+叶脉）、爱心箭头（中央爱心+爱心尾巴）；<strong>每款均为独立形状、互不雷同</strong>，并统一增加<strong>荧光描边与光晕</strong>（同色系三层光晕 + 亮描边），更易发现光标位置；页面所有元素同步使用所选光标，输入框、文本域、下拉框内仍显示文本光标，不影响输入体验</li>
<li>修复：<strong>鼠标样式前台不生效</strong>——修复光标焦点坐标语法（CSS 光标焦点坐标必须空格分隔，逗号分隔属非法语法会被浏览器丢弃整条声明）与样式覆盖问题（光标规则改为全局强制 <code>html,body,body *</code> + <code>!important</code>）；修复后光标规则经浏览器解析器验证命中页面全部元素；V2 图形尖端坐标同步校准（32px 热点 3 3）</li>
<li>安全加固：纯前台样式与后台配置项调整——光标文件名来自固定映射数组（无用户输入进入 URL）；主题色值经 #hex 白名单校验（非法值回退默认）；无新增外部请求/数据库操作；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单、IP 接口字面量校验），本轮无需重复加固</li>
<li>文档：模板说明（readme）同步更新，版本号升至 2.8.3</li>
</ul>
<h3>v2.8.2</h3>
<ul>
<li>新增：<strong>搜索入口设置</strong>——后台「模板设置 - 首页设置」新增「搜索入口」开关与「搜索位置」选项：
<ul>
<li><strong>搜索入口</strong>（开关，默认开启）：关闭后顶部导航栏与首页均不显示任何搜索入口</li>
<li><strong>搜索位置</strong>（默认「顶部导航栏里」）：选择「顶部导航栏里」保持原有顶部导航栏右侧搜索按钮/搜索框不变（原样式与交互完全保留）；选择「顶部导航栏下方」时顶部导航栏内不显示搜索，改为在<strong>导航栏与轮播图之间</strong>显示独立的搜索条（暖色手账风：卡片底、胶囊输入框、焦糖橘渐变搜索按钮，随深浅色主题自动适配），搜索条在首页与所有文章列表页顶部显示</li>
<li>原有顶部导航栏内搜索锚点不受影响：默认位置下行为与 v2.8.1 完全一致（含电脑端侧边栏启用搜索组件时 PC 端隐藏、手机端始终显示的原逻辑）</li>
<li>手机端搜索入口开关独立生效：手机端关闭搜索入口后，顶部导航栏与导航栏下方均不再显示任何搜索入口，与电脑端互不干扰</li>
</ul></li>
<li>新增：<strong>顶部导航栏内搜索框内嵌「搜索」按钮</strong>——电脑端顶部导航栏内搜索框展开后，输入框内右侧显示焦糖橘胶囊「搜索」按钮，输入关键字后点击按钮即可提交搜索（回车提交同样有效）；导航项较多搜索框折叠为放大镜图标时，展开后按钮随搜索框一同显示</li>
<li>修复：<strong>电脑端点击用户名/昵称无法弹出「个人中心 / 退出」菜单</strong>——原菜单定位容器被导航横向滚动裁剪导致弹出失效，改为以顶栏为定位锚点、菜单脱离滚动容器渲染；鼠标悬停或点击用户名即展开，<strong>再次点击即收起</strong>（收起时临时屏蔽 hover，避免鼠标仍停留在昵称上导致菜单重新展开，鼠标移出用户区后自动恢复悬停展开），点击菜单外区域自动关闭</li>
<li>修复：<strong>电脑端导航项过多时导航栏溢出</strong>——导航改为横向滚动，电脑端鼠标悬停导航区滚动滚轮即可查看隐藏导航项，手机端滑动导航区即可滑动查看；网站名始终保持一行完整显示不换行</li>
<li>修复：<strong>导航栏下方搜索条与侧边栏对齐</strong>——电脑端顶部导航栏下方搜索输入框上部与右侧边栏上部齐平、下部与下方内容间距与上部一致；电脑端、手机端同步去除搜索条外框，仅保留输入框与搜索按钮</li>
<li>全面检测：静态检查（17 个 PHP 文件 php -l、3 个 JS 文件 node --check）全部通过；本地环境实测用户前台（首页微语最新在前、文章列表、详情页面包屑/版权与免责声明/分享弹窗/评论区 IP 归属地与设备信息、404 页、微语全列表页、外链跳转确认弹窗、主题深浅切换、页脚版权/备案/友情链接/实时运行时间）与管理员后台（统计与前台一致、模板设置六标签渲染、设置保存与前台联动、评论管理归属地/浏览器信息）全部功能正常；分享图生成/缓存复用/保存下载、评论提交与回显均验证通过；本轮实测产生的测试数据已清理，数据库恢复原状</li>
<li>安全加固：纯前端表现层与后台配置项调整——新增 2 个设置项（开关 + 位置单选），位置值经 header.php 白名单校验（仅允许 nav/hero，非法值回退 nav）；搜索条表单 action 为站内地址、keyword 参数由 EMLOG 搜索逻辑处理，无新增输入输出点/数据库操作/外部请求；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单、IP 接口字面量校验），本轮无需重复加固</li>
<li>文档：模板说明（readme）同步更新，版本号维持 2.8.2</li>
</ul>
<h3>v2.8.1</h3>
<ul>
<li>优化：<strong>分享图生成两端通用且缓存复用</strong>——手机端与电脑端使用同一套 Canvas 绘制逻辑与固定画布（580×760），生成出的分享图片完全一致；分享图以「文章链接 + 标题 + 简介 + 发布日期」为键缓存，文章内容与链接未发生改变时只生成一次，之后点击「分享」直接调用缓存图片，不再重复生成；内容变更后自动重新生成并替换</li>
<li>优化：<strong>二维码生成优先 canvas 输出</strong>——分享图中的二维码改为优先使用 qrcodejs 的 canvas 输出（同步生成，手机端/电脑端无需等待异步回调即可立即出图），img 输出仅作兜底，兜底等待由 6 秒缩短为 3 秒；二维码生成尺寸由 168px 提升至 220px，绘制后更清晰</li>
<li>新增：<strong>二维码中心 LOGO</strong>——分享图片内的二维码中心显示模板「顶部图片 LOGO」（未设置时自动降级为竖排显示网站名），白底圆角小框贴合手账风格；中心 LOGO 尺寸控制在不影响扫码识别的范围内（二维码容错等级 M）</li>
<li>安全加固：二维码输出仅来自页面本地 Canvas 绘制（qrcodejs 同步生成、无外部请求）；中心 LOGO 仅引用站内配置的顶部图片（同源加载，协议已在后台设置处过滤）；缓存读写保持 try/catch 包裹，localStorage 不可用时静默降级为每次生成，不影响功能；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单、IP 接口字面量校验），本轮无需重复加固</li>
</ul>
<h3>v2.8.0</h3>
<ul>
<li>优化：<strong>分享图顶部显示网站名</strong>——分享图片顶部首行改为显示站点名称（取自模板「网站名」设置，而非当前页面标题），文章标题下移一行展示，层级更清晰</li>
<li>优化：<strong>分享图底部网址中文显示</strong>——分享图底部的站点链接在中文域名（IDN/Punycode）时自动转译为中文域名显示（如 <code>xn--…</code> → 中文域名），便于阅读；二维码内容仍为原始链接，不影响扫码跳转</li>
<li>优化：<strong>评论运营商信息中文显示</strong>——评论 IP 归属地的运营商名称（ISP）通过内置映射表翻译为中文（阿里云/中国电信/中国联通/中国移动/腾讯云/百度/谷歌/华为云等常见运营商），未命中的保留原名；归属地格式统一为「国家·省份·城市」</li>
<li>新增：<strong>评论设备信息增强</strong>——评论内容底部由「操作系统·浏览器·机器品牌」升级为「操作系统名称及版本（如 Windows 10、macOS 13、Android 13、iOS 17）· 浏览器及版本（如 Chrome 120）· 机器品牌及型号（如 Apple iPhone、Apple Mac、小米 2312DRA50C、三星 SM-…）」；全部由模板服务端从评论 UA 直接解析，不读取浏览器设置</li>
<li>优化：<strong>评论区 UI</strong>——每条评论独立成行、以圆角卡片框圈起，一个用户的评论（含其收到的全部回复）显示在同一个圈内；回复评论（子评论）不单独圈框，以缩进+左侧竖线跟随在父评论圈内展示；电脑端圆角 12px、手机端 10px，评论更清晰易读</li>
<li>安全加固：新增服务端 UA 解析函数（tui_get_os / tui_get_browser / tui_get_device）仅做字符串匹配与正则提取，不引入外部输入面；ip_info.php 运营商映射表为纯只读数组匹配；输出仍全部 htmlspecialchars 转义；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单、IP 接口字面量校验），本轮无需重复加固</li>
</ul>
<h3>v2.7.0</h3>
<ul>
<li>新增：<strong>文章版权与免责声明</strong>——每篇文章正文底部显示版权信息与免责声明区块；后台「文章页设置」提供显示开关、版权信息内容、免责声明内容（每行一条）三项配置，内容均留空则整个区块不显示</li>
<li>新增：<strong>文章分享</strong>——文章底部「分享」按钮，点击弹出分享窗，窗内 Canvas 实时生成一张分享图片（站点名、文章标题、文章简介、文章链接二维码、站点链接与生成日期，手账暖色风），图下「保存分享图片」按钮一键下载 PNG；图片以「文章链接+标题+简介+日期」哈希缓存，链接与内容未变时一直复用原图，内容变更自动重新生成</li>
<li>新增：<strong>评论显示 IP 归属地</strong>——前台评论区昵称旁显示评论 IP 的归属地与网络运营商（如「江苏 南京 · 中国电信」），回环/私网地址显示「本地网络」；归属地由模板内置接口异步查询（ip-api.com 中文接口），结果本地缓存，查询失败显示「未知」不影响评论</li>
<li>新增：<strong>评论显示设备信息</strong>——每条评论内容底部显示评论者的操作系统、浏览器与机器品牌（从评论 UA 读取解析，不读取浏览器设置；OS/浏览器由 EMLOG 核心 UA 解析，机器品牌由前端 UA 关键词推断）</li>
<li>新增：后台「模板设置」新增<strong>「文章页设置」标签页</strong>，上述声明/分享/评论信息六个设置项集中管理，不再散落于首页设置</li>
<li>修复：后台评论管理列表的 IP 归属地/运营商注入——EMLOG 后台评论列表由核心 admin 文件渲染且无模板注入点，模板包按规范不得修改核心文件，故归属地仅在前台评论区展示（后台列表仍显示评论 IP 原文）</li>
<li>安全加固：新增 ip_info.php 归属地接口为无状态独立脚本——仅接受合法 IPv4/IPv6 字面量（filter_var 校验，拒绝域名与任意字符串）、回环/私网/保留地址直接返回「本地网络」不发外部请求、curl 8s 超时、输出 nosniff+no-store JSON；声明/分享输出全部 htmlspecialchars 转义；分享图仅本地 Canvas 绘制，保存走 Blob 下载；评论 IP 与设备信息均经 htmlspecialchars 转义后输出；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单），本轮无需重复加固</li>
</ul>
<h3>v2.6.1</h3>
<ul>
<li>修复：页脚<strong>外部链接跳转确认弹窗</strong>在电脑端不居中、手机端偏上的问题——打开弹窗时统一以 <code>display:flex</code> 覆盖内联 <code>none</code> 恢复弹性居中；定位从 <code>inset</code> 简写改为 <code>top/left/right/bottom</code> 四边兼容写法，全端稳定居中</li>
<li>修复：手账导航页<strong>跳转确认弹窗弹出时先偏移、再弹回居中的「弹跳」问题</strong>——原位移动画（tui-pop）在动画期间覆盖了面板 <code>translate(-50%,-50%)</code> 的居中定位，先偏下偏右再跳回中心；已为导航页面板改用专用<strong>纯透明度淡入动画（tui-fade）</strong>，弹出即直接居中，不再弹跳</li>
<li>修复：<strong>进入手账导航页后登录态丢失、需重新登录的问题</strong>——导航数据增删改的 fetch 请求显式携带本站登录 Cookie（<code>credentials:'same-origin'</code>），确保个别浏览器/插件默认策略下服务端仍能正确识别登录管理员；GET 与原生表单（302 回跳）通道登录态实测稳定保持</li>
<li>新增：<strong>外部链接跳转确认弹窗由页脚扩展至全站</strong>——正文内链、侧边栏链接、顶部导航、页脚等所有 <code>target="_blank"</code> 外部链接，点击时统一弹出确认框（含目标站点、地址、风险提醒与免责说明），确认后才新窗口打开；手账导航页卡片仍由导航页自带的确认弹窗处理，互不冲突</li>
<li>优化：弹窗中的站点名称改为取链接的直接文本（不再混入侧边栏链接下方的描述文字），展示更准确</li>
<li>安全加固：本轮改动均为前端交互与防御性修复，无新增服务端输入面；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、CSRF 同源校验、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单），本轮无需重复加固</li>
</ul>
<h3>v2.6.0</h3>
<ul>
<li>新增：页脚<strong>外部链接跳转确认弹窗</strong>——点击页脚友情链接、ICP备案、公安备案等外部链接时弹出确认框，展示目标站点与地址，并附<strong>风险提醒与免责说明</strong>（提醒勿在陌生网站输入账号密码、谨慎保护个人信息与财产安全，继续访问即表示知悉并自愿承担风险），确认后才新窗口打开</li>
<li>适配：<strong>手账导航页面模板（page_nav.php）全面适配主模板</strong>——由独立的整页模板改为内容块模板，自动挂接主模板顶部导航、搜索、底部信息、登录弹窗与明暗主题；样式与配色全部并入 css/style.css（.tui-navpage-* 前缀），跟随主模板 CSS 变量与 data-theme 深浅色自动适配；导航页同样支持电脑端侧边栏联动；移除对第三方图片/字体的依赖（hero 头像改为站名首字渐变圆），页面加载更快更安全</li>
<li>优化：手账导航页点击外部小纸条的确认弹窗同步升级——标题改为「即将离开本站」，正文包含风险提醒与免责说明，文案与页脚弹窗统一（支持中英双语）</li>
<li>调整：页脚公安网备案不再显示「公安网备案：」文字与冒号，只显示备案号（如：苏公网安备 32010202010456 号）</li>
<li>安全加固：本轮新增页脚外链确认弹窗为纯前端交互，无新增服务端输入面；导航页移除第三方 CDN 图片与字体引用，降低外部依赖风险；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、CSRF 同源校验、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单），本轮无需重复加固</li>
</ul>
<h3>v2.5.0</h3>
<ul>
<li>新增：<strong>底部设置</strong>独立分组（后台「模板设置 - 底部设置」），集中管理版权信息、ICP备案、公安网备案、友情链接、网站运行时间</li>
<li>新增：<strong>版权信息</strong>（开关 + 内容），显示在备案信息上方，内容留空则不显示</li>
<li>调整：<strong>ICP备案</strong>改为模板后台独立设置（新增「ICP备案号」输入项），不再读取 EMLOG 后台的 ICP 备案号</li>
<li>优化：电脑端 ICP 备案与公安网备案合并为一行显示，中间以「|」分隔；仅当两项备案均开启且填写了备案号时才显示分隔符；手机端保持独立两行不变</li>
<li>优化：网站运行时间增加<strong>秒级实时计时</strong>（每秒刷新，显示 天/时/分/秒）</li>
</ul>
<h3>v2.4.0</h3>
<ul>
<li>新增：页脚底部信息模块（后台「首页设置」均可独立开关，内容留空则前台不显示）
<ul>
<li><strong>ICP备案</strong>：显示 EMLOG 后台填写的 ICP 备案号，点击跳转工信部官网</li>
<li><strong>公安网备案</strong>：填写备案号与链接（留空默认公安部官网），点击跳转公安部备案查询官网</li>
<li><strong>友情链接</strong>：多行「名称|链接」配置，页脚一行展示，可点击跳转</li>
<li><strong>网站运行时间</strong>：设置建站起始日期，页脚实时显示已运行天数/小时/分钟</li>
</ul></li>
</ul>
<h3>v2.3.2</h3>
<ul>
<li>优化：文章详情页面包屑升级为<strong>三级导航</strong>「首页 › 分类 › 文章标题」——分类层级自动读取该文章所属分类名并可点击跳转，颜色略深以区分层级，无分类时自动回退两级</li>
<li>优化：移除文章标题上方独立的分类胶囊按钮（信息已并入面包屑三级），页面更干净；置顶标签保留</li>
</ul>
<h3>v2.3.1</h3>
<ul>
<li>优化：文章详情页面包屑升级为<strong>圆角胶囊手账风</strong>——浅米渐变底、暖色细边与柔和投影，左侧配首页小房子图标，分隔符由斜杠改为 chevron「›」，当前文章标题加粗深色、超长省略；手机端自动限制标题宽度不撑破胶囊，整体更精致</li>
</ul>
<h3>v2.3.0</h3>
<ul>
<li>新增：文章列表与详情页日期改为<strong>智能相对时间</strong>——「刚刚 / x分钟前 / x小时前 / 昨天 HH:mm / x天前 / x个月前」，超过 90 天自动回退为完整日期，鼠标悬停仍可查看完整时间</li>
<li>新增：文章详情页顶部<strong>阅读进度条</strong>（焦糖色细条，随页面滚动实时前进）</li>
<li>新增：文章详情页<strong>面包屑导航</strong>（首页 / 文章标题），提升页面层级感</li>
<li>新增：正文<strong>图片灯箱</strong>——点击文章内图片全屏预览，点击空白处或按 ESC 关闭</li>
<li>新增：文章卡片底部<strong>「阅读全文 →」</strong>入口，箭头随悬停微动，强化可点性</li>
<li>优化：文章摘要最多显示 3 行（CSS line-clamp），不再因超长摘要撑破卡片</li>
<li>优化：文章代码块升级为深色圆角主题（行内 code 暖底红字），表格、引用块样式统一手账风</li>
<li>优化：jQuery 与 common.js 加 defer，不再阻塞首屏渲染，页面打开更快</li>
<li>修复：模板头部 fallback 版本号 <code>$v</code> 仍停留在 2.2.6 的回退问题，统一为 2.3.0</li>
<li>安全加固：本轮新增的灯箱/进度条均为前端只读交互，无新增服务端输入面；相对时间函数对非法入参兜底返回空串；延续既有全部加固（全站输出转义、LOGO 协议过滤、侧边栏 SQL 白名单、升级入口鉴权、zip 魔数校验、路径穿越过滤），本轮无需重复加固</li>
</ul>
<h3>v2.2.7</h3>
<ul>
<li>调整：顶部「搜索按钮」与首页「微语条」改为仅电脑端（≥1024px）受侧边栏组件联动隐藏——电脑端侧边栏开启且启用「搜索/微语」组件时隐藏顶部对应入口（由侧边栏承担）；手机端无论电脑端侧边栏开启还是关闭，顶部搜索按钮与微语条<strong>始终显示</strong>，不再受联动影响</li>
<li>实现：隐藏逻辑由 PHP 条件渲染改为 <code>.tui-hide-pc</code> 类 + CSS 媒体查询（≥1024px 才应用 display:none），手机端样式无任何隐藏规则，保证小屏始终可见</li>
<li>修复：侧边栏「存档」模块链接在未开启伪静态（isurlrewrite=off）时 404——原实现硬编码 <code>record/年月/</code> 路径，伪静态关闭时该路由不存在；现改为调用 EMLOG 官方 <code>Url::record()</code> 自适应生成链接（伪静态开→<code>record/年月/</code>，关→<code>?record=年月</code>），存档点击始终可访问</li>
<li>安全加固：本轮仅调整渲染层 class 与样式规则，无新增输入/输出面；延续既有全部加固（nosniff/SAMEORIGIN 头、全站输出转义、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单），本轮无需重复加固</li>
</ul>
<h3>v2.2.6</h3>
<ul>
<li>新增：侧边栏「日历」模块改为<strong>时间流逝进度</strong>样式（参照手账风时间进度组件）——展示今日/本周/本月/今年已经过去的时长、百分比与十段式进度条（分段色块实时填充），右上角配彩色冰淇淋装饰图标，深浅色模式自动适配</li>
<li>修复：侧边栏「微语」模块排序彻底修正——不再依赖数据源顺序，改为直接按发布时间（date 时间戳）倒序查询（id 仅作并列稳定排序），侧边栏与微语全列表页同步修复，确保最新发布的微语永远排在最上面</li>
<li>优化：日历模块不再依赖当月文章日期查询（去掉一次数据库遍历），纯服务器时间计算，加载更快</li>
<li>安全加固：日历/微语输出继续沿用全站 htmlspecialchars 转义；微语查询走侧边栏 SQL 字段白名单机制（table/fields/order 白名单校验，杜绝注入与未知列报错）；延续既有全部加固（nosniff/SAMEORIGIN 头、导航数据原子写入、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤、侧边栏 SQL 白名单），本轮无需重复加固</li>
</ul>
<h3>v2.2.5</h3>
<ul>
<li>修复：侧边栏「后台已开启但前端不渲染」的根本问题——v2.2.4 自造的组件键名与 EMLOG Pro 官方 widgets1 键名（blogger/calendar/tag/twitter/sort/archive/newcomm/newlog/hotlog/link/search/custom<em>wg</em><em>）不一致，导致所有组件落入无效分支被静默跳过；本轮将侧边栏渲染整体改为官方 widget_</em> 回调范式（与 EMLOG 官方 default 模板一致），新增全部官方组件回调并对新旧键名自动归一，后台开启的组件前端必定渲染</li>
<li>新增：侧边栏 12 类模块全部可用——个人资料（博主卡：头像/昵称/签名/文章·评论·标签统计）、日历、微语、标签、分类、存档、最新评论、最新文章、热门文章、链接、搜索、自定义文本组件，模块与顺序完全由后台「侧边栏/组件」配置决定</li>
<li>修复：博主卡统计改读 EMLOG 核心 sta 缓存（文章数/评论数）并兼容新旧模型，标签数由标签缓存实时计算，统计与后台数据一致</li>
<li>修复：微语模块输出不再二次转义（EMLOG Pro 已将微语内容渲染为 HTML，避免双引号/标签错乱）</li>
<li>修复：标签模块链接补全站点前缀（Url::tag），点击可正常跳转</li>
<li>修复：移除侧边栏微语项的死链（EMLOG Pro 无独立微语页），避免 404</li>
<li>优化：顶部微语条/搜索按钮与侧边栏组件联动——侧边栏开启「微语」时顶部微语自动隐藏、开启「搜索」时顶部搜索按钮隐藏，对应组件未开启则照常显示</li>
<li>优化：首页文章布局联动——未开启侧边栏时保持双列卡片网格，开启侧边栏后文章改为单列展示</li>
<li>安全加固：侧边栏新增 SQL 全部经字段白名单+表前缀校验拼接（主键仅 id/gid、审核列仅 checked），杜绝注入与未知列报错；延续既有全部加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤），本轮无需重复加固</li>
</ul>
<h3>v2.2.4</h3>
<ul>
<li>修复：侧边栏「微语、标签、分类、最新评论、最新文章、热门文章、链接」等模块在后台已开启但前端不渲染的问题——侧边栏配置读取改为多路兼容（options_cache 全局 / Option 类 / 缓存对象三路兜底）并支持序列化、JSON、数组三种格式解析；任一方式读取失败时兜底渲染全部内置组件，确保后台已开启的组件前端一定显示</li>
<li>修复：标签、分类模块不再依赖 EMLOG 各版本签名不一致的模型方法，改为白名单 SQL 直查 tag/sort 表（字段全部白名单拼接，兼容新旧版表结构），杜绝未知列与注入风险</li>
<li>优化：顶部导航的「微语条」与「搜索按钮」改为按组件联动隐藏——仅当后台侧边栏配置中开启了「微语/搜索」组件时自动隐藏顶部对应入口（避免重复展示），未开启时照常显示</li>
<li>优化：首页文章布局联动——未开启侧边栏时保持双列卡片网格，开启侧边栏时主内容区文章改为单列展示，侧边栏占用右侧空间</li>
<li>安全加固：侧边栏新增 SQL（tag/sort 表直查）沿用字段白名单拼接机制；延续既有全部加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤），本轮无需重复加固</li>
</ul>
<h3>v2.2.3</h3>
<ul>
<li>重构：侧边栏不再写死模块，改为完全读取 EMLOG 后台「侧边栏/组件」设置（option.widgets1 配置）动态渲染——模块与顺序全部由后台决定，包含：个人资料（博主卡）、日历、微语、标签、分类、存档、最新评论、最新文章、热门文章、链接、搜索、自定义文本组件，共 12 类模块</li>
<li>新增：日历模块（当月日历，有文章日期高亮）、存档模块（按年月分组计数）、最新评论模块（白名单 SQL 读取）、热门文章模块（按浏览量排序）、链接模块、搜索模块、自定义文本组件（后台自定义组件内容原样输出）</li>
<li>新增：支持后台自定义组件标题（widget_title 解析，格式『模块名 (标题)』自动提取）与自定义文本组件</li>
<li>兼容：评论表/链接表同样按探测结果白名单取列（兼容新旧版 EMLOG 表结构），全部模块数据均来自 EMLOG 核心 API 或白名单 SQL，杜绝注入与未知列报错</li>
<li>安全加固：新增模块 SQL 全部沿用字段白名单拼接机制；延续既有全部加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤），本轮无需重复加固</li>
</ul>
<h3>v2.2.2</h3>
<ul>
<li>修复：开启「电脑端侧边栏」后文章列表报 SQL 1054 Unknown column 'id' in 'order clause'。原因：经典版 EMLOG 的 blog 表主键为 gid 而非 id，ORDER BY 引用 id 列不存在；现改为先 SHOW COLUMNS 探测表结构——有 id 列则按 id 排序、否则按 gid 排序，checked 审核列同样按探测结果动态拼接，兼容新旧版本 EMLOG，不再产生任何 SQL 报错</li>
<li>安全加固：侧边栏 SQL 全部由白名单字段拼接（主键列仅允许 id/gid、审核列仅允许 checked），杜绝注入；延续既有全部加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤），本轮无需重复加固</li>
</ul>
<h3>v2.2.1</h3>
<ul>
<li>修复：开启「电脑端侧边栏」后首页右侧留空的问题——未开启侧边栏时首页恢复原有双列卡片布局（不再额外包裹主内容容器，右侧不再空置），开启后仍为主内容 + 侧边栏双栏排版</li>
<li>优化：开启电脑端侧边栏后，首页顶部微语区块自动隐藏（避免重复展示），关闭侧边栏时首页微语恢复显示</li>
<li>修复：开启侧边栏后文章列表 SQL 1064 报错。原因：不同 EMLOG 版本 <code>Log_Model::getLogsForHome()</code> 参数签名不一致（部分版本为 条件+分页 形式），按页码传参导致生成 <code>... and date&lt;= 时间戳 1 LIMIT 40, 10</code> 的损坏 SQL；现改为原生 SQL 查询最新文章，并先探测 <code>blog</code> 表字段（兼容有无 <code>checked</code> 审核字段的新旧版本），字段值全部白名单拼接，杜绝 SQL 注入</li>
<li>安全加固：侧边栏最新文章 SQL 全部使用常量字段与强类型取值；延续既有全部加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤），本轮无需重复加固</li>
</ul>
<h3>v2.2.0</h3>
<ul>
<li>新增：电脑端侧边栏（参照双栏模板布局）——屏幕宽度 ≥1024px 时，内容区右侧显示侧边栏，手机端始终隐藏</li>
<li>新增：侧边栏包含博主卡片（头像/昵称/签名）、站点统计（文章/评论/标签数）、最新文章、全部分类、标签云，全部使用 EMLOG 核心 API 实时读取</li>
<li>新增：后台「首页设置」新增「电脑端侧边栏」开关，默认关闭，开启后电脑端显示侧边栏</li>
<li>新增：侧边栏支持详情页、自建页面、首页与全部列表页（分类/标签/搜索页），滚动时侧边栏跟随吸顶</li>
<li>优化：首页开启侧边栏后，主内容区保持双列卡片网格布局，与侧边栏并列排版</li>
<li>调整：后台设置说明精简为「模板介绍 + 设置说明」，移除全部更新说明与更新日志（历史版本记录见本 readme 版本历史）</li>
<li>安全加固：侧边栏全部输出经 htmlspecialchars 转义；统计/列表读取均做模型类存在性检查与异常兜底；延续既有全部加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限、LOGO 协议过滤）</li>
</ul>
<h3>v2.1.0</h3>
<ul>
<li>新增：「顶部图片 LOGO」设置升级为三种方式——点击上传图片文件、从媒体库选择已有图片、直接粘贴图片地址，任选其一</li>
<li>优化：上传的 LOGO 图片由 EMLOG 后台统一管理，无需外部图床；媒体库/上传返回的相对路径自动补全为站内绝对地址</li>
<li>安全加固：LOGO 地址做协议过滤，非 http(s)/站内相对路径一律拼接域名前缀，杜绝 javascript: 等危险协议注入</li>
<li>说明：v2.0.10 未单独发布，其改动合并入本版本</li>
</ul>
<h3>v2.0.9</h3>
<ul>
<li>新增：后台「首页设置」新增「顶部图片 LOGO」选项，填写图片地址后，导航栏显示该图片并替换网站名称及其单字 LOGO；留空则继续显示网站名称</li>
<li>优化：移除登录用户昵称/账号前的单字圆形 LOGO 显示，导航栏更简洁</li>
<li>修复：点击昵称/账号展开下拉菜单后再次点击无法关闭的问题——原因是 CSS <code>:focus-within</code> 与 JS 类的焦点残留冲突；已移除焦点残留控制，菜单开合完全由 JS 类管理，点击菜单外部也会自动收起</li>
<li>安全加固：延续 v1.1–v2.0.8 全部已有加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限）</li>
</ul>
<h3>v2.0.8</h3>
<ul>
<li>修复：后台设置首页微语只显示 1 条时，实际显示的是最旧的那条。原因是 <code>getTwitters</code> 在 SQL 层就 LIMIT 了条数，若 EMLOG 按升序返回，LIMIT 1 拿到的是最旧记录，PHP 端排序只有 1 条数据无法修正</li>
<li>修复方式：改为先取 50 条微语，按自增 id 倒序排序后再 <code>array_slice</code> 截取需要的条数，确保无论后台设置显示几条，第一条永远是最新发布的微语</li>
</ul>
<h3>v2.0.7</h3>
<ul>
<li>修复：微语排序问题彻底修正。v2.0.6 用 <code>strtotime(date)</code> 排序，当 <code>date</code> 字段是 Unix 时间戳或已格式化字符串时解析失败导致排序无效；改为优先按自增 <code>id</code> 倒序（id 越大越新），日期作为兜底，确保最新发布的微语一定排在最上面</li>
<li>首页微语区块和微语全列表页均已修正</li>
</ul>
<h3>v2.0.6</h3>
<ul>
<li>修复：用户下拉菜单中「个人中心」「退出」链接点击无响应的问题（之前 JS 把整个用户菜单内的链接都拦截了），现在可正常跳转</li>
<li>修复：微语列表（首页微语区块和微语全列表页）严格按发布时间倒序排列，最新的微语显示在最上面</li>
<li>新增：导航栏搜索功能——顶栏右侧放大镜图标，点击展开搜索输入框，输入关键字后回车或再次点击放大镜提交，走 EMLOG 原生模糊搜索</li>
<li>安全加固：延续 v1.1–v2.0.5 全部已有加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限）</li>
</ul>
<h3>v2.0.5</h3>
<ul>
<li>优化：导航栏移除独立的「退出」按钮，登录用户昵称改为下拉触发器</li>
<li>新增：桌面端鼠标悬停昵称、触屏端点击昵称，上下展开「个人中心」和「退出」两个选项</li>
<li>新增：「个人中心」直接进入后台；昵称前显示首字母圆形头像，右侧带向下箭头指示</li>
<li>优化：移动端汉堡菜单内同样支持点击昵称展开/收起用户菜单，不影响普通导航链接</li>
<li>安全加固：延续 v1.1–v2.0.4 全部已有加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限）</li>
</ul>
<h3>v2.0.4</h3>
<ul>
<li>新增：大屏（≥1024px）顶部导航栏不再折叠为汉堡菜单，直接横向展开显示所有导航链接</li>
<li>优化：大屏隐藏汉堡按钮和遮罩层，导航项显示为圆角胶囊样式，当前页高亮为焦糖橘色</li>
<li>优化：桌面端导航链接悬停有背景反馈，鼠标操作更直观</li>
<li>安全加固：延续 v1.1–v2.0.3 全部已有加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限）</li>
</ul>
<h3>v2.0.3</h3>
<ul>
<li>优化：大屏（≥1024px）首页文章卡片改为<strong>双列网格布局</strong>，桌面端浏览效率大幅提升</li>
<li>优化：内容区宽度逐级扩展——平板 760px → 桌面 960px → 超宽屏（≥1400px）1080px，不再是窄手机条居中</li>
<li>优化：桌面端轮播图高度增至 340px（超宽屏 380px），封面图和文章间距更舒展</li>
<li>优化：文章详情页字号、行距、评论区间距在大屏上同步放大（正文 16.5px、行距 1.9）</li>
<li>优化：大屏背景增加暖色渐变氛围层，视觉层次更丰富</li>
<li>优化：分页按钮、浮动按钮、顶栏圆角在大屏上比例协调</li>
<li>安全加固：延续 v1.1–v2.0.2 全部已有加固（nosniff/SAMEORIGIN 头、导航数据原子写入、全站输出转义、升级入口鉴权、zip 魔数校验、路径穿越过滤、文件数上限）</li>
</ul>
<h3>v2.0.2</h3>
<ul>
<li>新增：多屏幕响应式适配——小屏手机（≤360px）紧凑布局、标准手机默认、大屏手机/小平板（481px+）加宽内容区、平板（769px+）进一步优化排版</li>
<li>新增：历史评论消息完整展示不压缩——所有屏幕尺寸下评论内容自动换行完整显示，子评论缩进随屏幕宽度自适应调整</li>
<li>新增：viewport 允许用户双指缩放（移除 maximum-scale=1 限制），小屏阅读更清晰</li>
<li>新增：横屏手机自动优化布局（弹窗高度限制、轮播高度收缩）</li>
<li>新增：刘海屏安全区（safe-area-inset-bottom）适配</li>
<li>调整：内容最大宽度从固定 480px 改为随屏幕尺寸自动变化（360px 以下全宽、481px+ 560px、769px+ 680px）</li>
<li>安全加固：独立页面（微语全列表页、升级脚本、手账导航页）增加 X-Content-Type-Options: nosniff 和 X-Frame-Options: SAMEORIGIN 头</li>
<li>安全加固：手账导航数据文件写入改为原子操作（先写临时文件再 rename），防止写入中断导致数据损坏</li>
<li>安全加固：延续 v1.1–v2.0.1 已完成的全站输出转义、升级入口鉴权、zip 魔数校验、解压路径过滤、文件数上限</li>
</ul>
<h3>v2.0.1</h3>
<ul>
<li>新增：更新API设置面板顶部加入「甜橙更新推送管理」站快捷链接（新窗口打开）</li>
<li>版本号同步至 2.0.1</li>
</ul>
<h3>v2.0.0</h3>
<ul>
<li>主版本升级：更新逻辑确认为<strong>仅解压覆盖同名文件</strong>，升级过程不删除模板目录下任何现有文件，用户自定义内容全保留</li>
<li>升级步骤文案明确化：覆盖阶段只替换更新包内同名文件，不做目录清空</li>
<li>安全：延续 zip 魔数校验、路径穿越过滤、文件数上限、管理员鉴权</li>
</ul>
<h3>v1.10</h3>
<ul>
<li>更新时仅解压覆盖，不再清空模板目录，保留自定义文件</li>
</ul>
<h3>v1.9</h3>
<ul>
<li>修复：微语全列表页顶部 LOGO 和网站名不显示（独立入口未 extract option）</li>
<li>完善：微语页 title 设为「微语 - 站名」</li>
<li>后台说明：补充当前功能清单与 v1.0–v1.9 更新日志</li>
</ul>
<h3>v1.8</h3>
<ul>
<li>修复：后台「首页显示微语」开关不显示的问题（checkon 类型补全 values 配置）</li>
<li>调整：微语开关默认开启，首页默认显示最新微语</li>
<li>确认：后台设置说明含模板简介与 v1.0–v1.8 更新日志</li>
<li>安全：微语输出仍走 htmlspecialchars 转义</li>
</ul>
<h3>v1.7</h3>
<ul>
<li>新增：首页第一页显示微语区块（毛玻璃卡片样式），点击「查看全部」跳转微语页</li>
<li>新增：后台「首页设置」增加「首页显示微语」开关和「微语显示条数」（1–20）</li>
<li>调整：后台更新标签由「更新检测」改名为「更新API设置」</li>
<li>新增：后台设置说明页加入模板简介和完整更新日志</li>
<li>安全加固：v1.1–v1.6 已完成的全站输出转义、升级入口鉴权、zip 魔数校验、解压路径过滤、文件数上限继续保留；微语内容输出前 htmlspecialchars</li>
</ul>
<h3>v1.6</h3>
<ul>
<li>调整：升级完成后不再自动关闭进度弹窗，在日志末尾追加「✓ 更新完成，请关闭窗口进行刷新体验新功能」</li>
<li>新增：弹窗标题栏右上角增加 × 关闭按钮，用户看完进度后可手动关闭</li>
<li>安全加固：v1.1–v1.5 已完成的全站输出转义、升级入口鉴权、zip 魔数校验、解压路径过滤、文件数上限继续保留，本轮未发现新注入点</li>
</ul>
<h3>v1.5</h3>
<ul>
<li>调整：移除更新面板顶部的「立即检测」手动按钮（进入设置页自动检测，无需手动点）</li>
<li>调整：移除发现新版本后的「手动下载」链接（统一走「自动备份并升级」弹窗流程）</li>
<li>安全加固：v1.1–v1.4 已完成的全站输出转义、升级入口鉴权、zip 魔数校验、解压路径过滤、文件数上限继续保留，本轮未发现新注入点</li>
</ul>
<h3>v1.4</h3>
<ul>
<li>修复：后台点「立即检测」后整页刷新会跳回默认标签，现在检测完成后自动停留在「更新检测」标签</li>
<li>新增：点「自动备份并升级」不再直接跳转，而是弹出毛玻璃模态窗口，分步实时显示 备份→下载→校验→解压→覆盖→清理→完成 的进度；完成后自动关闭弹窗并刷新父页</li>
<li>安全加固：v1.1/v1.2/v1.3 已完成的全站输出转义、升级入口鉴权、zip 魔数校验、解压路径过滤、文件数上限继续保留，本轮未发现新注入点</li>
</ul>
<h3>v1.3</h3>
<ul>
<li>调整：顶部品牌区 LOGO（站点首字方块）保持在网站名左侧，与站名横向排列</li>
<li>修复：取消登录后导航里「管理」项昵称前的用户头像显示，登录后只显示昵称与退出入口</li>
<li>安全加固：v1.1/v1.2 已完成的全站 htmlspecialchars 转义、升级入口鉴权、zip 魔数校验、解压路径过滤继续保留，本轮未发现新的注入点</li>
</ul>
<h3>v1.2</h3>
<ul>
<li>新增：发现新版本后「自动备份并升级」一键流程——自动备份当前模板到 <code>content/backup/tiancheng_ui_时间戳/</code>，自动从更新服务器下载新版 zip，校验后自动解压覆盖，完成后自动清理下载缓存与临时解压目录</li>
<li>新增：升级前二次确认弹窗；升级完成后在设置页显示结果提示（含备份目录名，便于回滚）</li>
<li>安全加固：升级入口仅管理员可访问；下载 zip 校验 <code>PK</code> 魔数；解压时过滤 <code>../</code>、绝对路径与盘符等非法路径；限制单包文件数 ≤500；覆盖前先备份，失败自动清理半成品</li>
<li>调整：原「下载更新包」外链改为「自动备份并升级」主按钮，保留「手动下载」副链</li>
<li>说明：v1.1 已完成的全站 htmlspecialchars 输出转义、views/comnum 强转整型等加固在本版继续保留</li>
</ul>
<h3>v1.1</h3>
<ul>
<li>新增：模板后台「更新检测」标签页，对接更新推送管理系统 API（check.php / download.php，X-API-Key 鉴权）</li>
<li>新增：进入模板设置页自动检测更新（结果缓存 10 分钟），附「立即检测」手动按钮</li>
<li>新增：设置项「更新服务器地址」「API 密钥」「站点域名」，检测所需参数统一从模板设置读取</li>
<li>新增：发现新版时展示最新版本号、发布日期、更新说明、包大小与下载链接</li>
<li>安全加固：全站模板输出统一 htmlspecialchars 转义（文章标题、分类名、作者昵称、评论者昵称、轮播配置、备案号、站点标题/关键词/描述、评论表单 cookie 预填值等），views/comnum 强转整型</li>
<li>修复：修复版/密码页 CSS 版本号写死导致的缓存问题，改为按文件修改时间动态加载</li>
<li>修复：上一版顶栏汉堡菜单与主题按钮在 head 同步加载下点击无效的问题（事件绑定移入 DOM ready）</li>
</ul>
<h3>v1.0</h3>
<ul>
<li>首个手机版暖色手账风格版本：毛玻璃顶栏/导航/登录注册弹窗、轮播、文章卡片、明暗主题、返回顶部</li>
</ul>]]></description>
    <pubDate>Sat, 10 Oct 2026 14:11:40 +0800</pubDate>
    <dc:creator>开心彩棉糖</dc:creator>
    <guid>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/9.html</guid>
</item>
<item>
    <title>自驾游手账记录</title>
    <link>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/6.html</link>
    <description><![CDATA[<p><img src="/content/uploadfile/202608/14681786775956.png" alt="" /><br />
<img src="/content/uploadfile/202608/bd181786776062.png" alt="" /></p>
<h2>自驾游手账 - Road Trip Journal</h2>
<p>PHP 7.3 + SQLite3 自驾游记录管理系统，暖色扁平手账风格。</p>
<h2>功能特性</h2>
<h3>核心功能</h3>
<ul>
<li>旅行卡片管理（出发地、目的地、车型选择油车/电车/混动车、自动统计总里程/总花费/总天数）</li>
<li>每日行程记录（表显起止自动算里程、按车型显示油费/电费/油电都有、油耗/电耗统计、过路费/住宿/餐饮/其他花费、露营地、天气、当日出发地/目的地）</li>
<li>每日记录支持 inline 原地编辑（显示框直接变输入框）</li>
<li>预算追踪、油耗/电耗计算、花费分类统计</li>
<li>CSV 导入导出（<strong>会员专属</strong>，支持车型和电耗列）</li>
</ul>
<h3>用户系统</h3>
<ul>
<li>账号密码注册/登录，第一个注册用户自动成为超级管理员</li>
<li>注册开关 + 注册数量限制（达限自动关闭）</li>
<li>用户名注册后不可修改，可设置/修改昵称（优先显示昵称）</li>
<li>昵称规则：不可重复、接入违禁词库过滤、每月仅可修改一次（管理员不受限）</li>
<li>个人中心：按钮式展开面板（修改昵称、修改密码、签到、积分兑换会员、称号设置）</li>
</ul>
<h3>称号系统</h3>
<ul>
<li>仅保留里程10级称号（初出茅庐→星际旅行者）</li>
<li>用户自行选择佩戴，不选则使用最新解锁的称号</li>
<li>会员可自由设置称号颜色</li>
<li>管理员后台可新增/修改/删除称号</li>
</ul>
<h3>签到 &amp; 积分 &amp; 会员</h3>
<ul>
<li>每日签到赚积分（默认+10积分）</li>
<li>连续签到奖励：连续7天额外+30，连续30天额外+100（可配置）</li>
<li>积分兑换会员：月度(默认300分)/季度(默认800分)/年度(默认1500分)</li>
<li>会员特权：
<ul>
<li>CSV导入导出旅行数据</li>
<li>好友上限500人（非会员50人）</li>
<li>聊天记录保留500条（非会员50条）</li>
<li>自由设置称号颜色</li>
</ul></li>
<li>积分变动记录可查（按钮式弹窗查看详细记录）</li>
</ul>
<h3>评论互动 &amp; 私信聊天</h3>
<ul>
<li>旅行详情页评论区（登录用户可发表评论）</li>
<li>私信系统：好友制（添加好友后才能私聊，管理员无需加好友）</li>
<li>响应式聊天：PC端点击好友在右侧显示聊天框，手机端仅显示左侧列表（通知/好友/请求/黑名单），点击好友或通知分组弹出聊天/详情窗口（底部弹出式88vh高度，圆角顶部，可点击遮罩或关闭按钮关闭）</li>
<li>聊天弹窗支持AJAX实时收发（3秒轮询新消息，自动滚动到底部，Enter发送）</li>
<li>通知分组：管理员通知、系统通知（PC端右侧查看，手机端点击弹窗查看，各保留最新50条，管理员通知可弹窗内回复）</li>
<li>手机端积分变动记录：按钮式弹窗查看，底部弹出式自适应</li>
<li>好友搜索、好友请求接受/拒绝、删除好友、黑名单（拉黑后自动解除好友且无法互发消息）</li>
<li>管理员/系统/后台消息归入系统通知，标注来源，不在会话列表显示</li>
<li>管理员来源通知可回复（加好友后），系统/后台来源不可操作</li>
<li>未读条数提示：通知/好友/请求tab显示未读徽章；手机端每个好友及通知分组头像右上方显示对应未读条数，PC端通知分组未读数显示在列表末尾，点击查看后自动清除</li>
<li>删除好友后自动清除双方聊天记录</li>
<li>手机端称号和会员徽章两端弧形（pill形状），称号字体调小并优化padding垂直居中</li>
<li>个人中心积分显示移至签到模块顶部大字展示</li>
<li>个人中心头部取消徽章式会员/称号显示，改为昵称下方依次显示：用户名、会员状态、当前称号、注册时间，统一小字灰色样式</li>
<li>头像上传功能：支持JPG/PNG/GIF/WEBP，自动压缩到50K以内，删除旧头像只保留压缩图</li>
<li>聊天框有消息时自动隐藏&quot;暂无消息&quot;提示</li>
</ul>
<h3>违禁词管理（5级惩罚机制）</h3>
<ul>
<li>违禁词分类：聊天违禁词、昵称违禁词、通用（聊天+昵称）</li>
<li>第1次：屏蔽违禁词 + 系统私信警告</li>
<li>第2次：屏蔽 + 禁言3天 + 私信警告</li>
<li>第3次：屏蔽 + 禁言7天 + 私信警告</li>
<li>第4次：屏蔽 + 禁言365天 + 私信警告</li>
<li>第5次：屏蔽 + 永久禁言 + 私信警告</li>
<li>管理员后台：手动添加/删除违禁词（可选分类）、一键自动同步内置词库</li>
<li>cron.php 自动通过必应搜索引擎搜索网络违禁词并添加到对应分类库</li>
<li>支持 cron 定时自动同步（cron.php，需密钥验证）</li>
</ul>
<h3>管理员后台</h3>
<ul>
<li>📊 概览：全站数据统计 + 最近违规记录</li>
<li>👥 用户管理：编辑昵称、调整积分、开通/续期/取消会员、封禁/解封、禁言/解禁、重置违规、重置密码、切换管理员、添加用户、删除用户</li>
<li>🗺️ 旅行管理：查看/删除所有用户旅行（显示车型）</li>
<li>💬 评论管理：隐藏/删除评论</li>
<li>🚫 违禁词管理：列表/添加/删除/自动同步</li>
<li>🌐 IP封禁管理：封禁IP（支持到期时间）/解封</li>
<li>📢 群发消息：向所有用户发送系统私信（红色系统称号，归入管理员通知）</li>
<li>⚙️ 站点设置：站点名称、版本号、备案号、版权信息、Cron密钥、注册开关、注册数量限制</li>
<li>⭐ 积分设置：签到积分、连续签到奖励、会员兑换积分</li>
<li>🏆 称号设置：里程称号新增/修改/删除</li>
<li>💻 系统信息：PHP/SQLite版本、数据库大小、数据库备份下载</li>
</ul>
<h3>界面与交互</h3>
<ul>
<li>暖色扁平手账风格，响应式自适应</li>
<li>手机端底部导航（首页/私信/我的，管理员额外显示管理）</li>
<li>私信tab AJAX无刷新切换（通知/好友/请求/黑名单）</li>
<li>所有弹窗与UI风格一致，不显示网址</li>
<li>Flash提示3秒自动消失</li>
<li>底部版权/版本号/备案号居中显示（PC和手机端）</li>
</ul>
<h3>安全</h3>
<ul>
<li>全局页脚居中显示版权信息 + 版本号 + 备案号（后台可改）</li>
<li>IP封禁（访问即403）</li>
<li>账号封禁</li>
<li>Cron密钥保护（未配置密钥或密钥错误均拒绝执行）</li>
<li>数据库目录 .htaccess 保护</li>
</ul>
<h2>部署要求</h2>
<ul>
<li>PHP 7.3+（需开启 SQLite3 扩展）</li>
<li>无需 MySQL，数据自动存储在 <code>data/roadtrip.db</code></li>
</ul>
<h2>安装</h2>
<ol>
<li>将所有文件上传到 PHP 服务器</li>
<li>确保 <code>data/</code> 目录可写</li>
<li>访问首页，第一个注册的账号即为超级管理员</li>
</ol>
<h2>定时任务（可选）</h2>
<p>配置 cron 定期调用 <code>cron.php</code> 自动同步违禁词库并清理过期封禁：</p>
<pre><code>0 3 * * * wget -q -O /dev/null http://your-domain/cron.php?key=YOUR_CRON_KEY</code></pre>
<p>密钥在管理员后台 → 站点设置 中配置。</p>
<h2>文件结构</h2>
<pre><code>├── index.php          # 入口路由
├── login.php          # 登录
├── register.php       # 注册
├── preview.php        # 首页预览（未登录）
├── dashboard.php      # 我的自驾之旅（已登录首页）
├── trip.php           # 旅行详情+每日记录+评论
├── messages.php       # 私信聊天+好友管理+通知
├── profile.php        # 个人中心（签到/积分/会员/昵称/密码/称号）
├── admin.php          # 管理员后台
├── import.php         # CSV导入（会员）
├── export.php         # CSV导出（会员）
├── api.php            # AJAX接口（消息收发/实时轮询）
├── cron.php           # 定时任务端点（需密钥）
├── config.php         # 数据库配置+自动迁移
├── functions.php      # 全部函数库
├── header.php         # 共享头部
├── footer.php         # 共享底部+底部导航
├── logout.php         # 退出
├── css/style.css      # 样式
├── js/app.js          # 交互脚本
├── data/              # 数据库目录（.htaccess保护）
└── README.md</code></pre>]]></description>
    <pubDate>Sat, 15 Aug 2026 14:35:52 +0800</pubDate>
    <dc:creator>开心彩棉糖</dc:creator>
    <guid>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/6.html</guid>
</item>
<item>
    <title>甜橙考勤工资管理系统</title>
    <link>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/3.html</link>
    <description><![CDATA[<h2>甜橙考勤工资管理系统</h2>
<h2>功能说明：</h2>
<h3>核心功能：</h3>
<p>多用户考勤记录（上午 / 下午 / 加班 / 备注）、可视化日历考勤、自动计算工资、出勤统计、用户称号系统。</p>
<h3>权限体系：</h3>
<p>首个注册用户为管理员，普通用户仅管理自身数据，管理员拥有后台权限。</p>
<h3>工资计算：</h3>
<p>支持个人日薪 / 时薪设置 + 全局默认工资，按出勤天数 + 加班时长自动核算。</p>
<h3>交互体验：</h3>
<p>微信小程序风格 UI，移动端 / 电脑端自适应，点击日历快速编辑考勤。</p>
<h3>预览模式：</h3>
<p>未登录可查看演示数据，登录后使用完整功能。</p>
<h3>数据安全：</h3>
<p>修复 SQL 注入、XSS 漏洞，密码加密存储，权限严格校验。</p>
<h2>使用说明：</h2>
<h3>运行环境：</h3>
<p>PHP 7.0+ / 8.0+，开启SQLite3 扩展（默认已开启）。</p>
<h3>部署方式：</h3>
<p>上传到服务器 / 本地 PHP 环境运行。</p>
<h3>首次使用：</h3>
<p>打开页面注册账号，第一个账号自动成为管理员。</p>
<h3>日常使用：</h3>
<p>登录后点击日历添加 / 修改考勤，设置个人工资，查看统计数据。</p>
<h3>数据存储：</h3>
<p>自动生成 attendance.db 数据库文件，无需手动配置。</p>
<h3>权限说明：</h3>
<p>所在目录必须给予777权限，否则无法正常使用。</p>
<h3>版本号说明：</h3>
<p>V26.04.23为2026年04月23号，源码更新测试完成的日期。</p>
<hr />
<hr />
<h2>更新记录</h2>
<h3>2026.08.15</h3>
<p>修改为暖色手账风格，统一所有页面的风格。<br />
<img src="/content/uploadfile/202608/a3251786775620.png" alt="" /></p>
<h3>2026.05.10</h3>
<p>1、修改首页全局为AJAX更新，不更新整个网页更方便。<br />
2、选择月份直接显示所选月份的数据。<br />
3、删除查询按钮，调整月份选择框，显示更美观。<br />
4、修改首页所有弹窗为统一风格。<br />
5、新增成功和失败的弹窗提示。<br />
6、更新直接覆盖更新所需文件即可。</p>
<h3>2026.04.23</h3>
<p>基本实现了所需功能。</p>]]></description>
    <pubDate>Thu, 23 Apr 2026 22:04:02 +0800</pubDate>
    <dc:creator>开心彩棉糖</dc:creator>
    <guid>https://xn--h0t0irjt23akiz.cn/yuanchuangchengxu/3.html</guid>
</item>
</channel>
</rss>