首页 前端开发 web应用

短网址 · 产品与运维文档

tts小陈 发布于 2026-08-10 14:07 更新于 2026-08-10 阅读 3 约 3,723 字 · 阅读 10 分钟
web应用 · web应用 php

8v4 短网址 · 产品与运维文档

版本:V3.9.1(2026-08-10)| 部署环境:phpstudy(PHP 8.2.9 + MySQL 5.7 / SQLite 双兼容)


一、项目概述

8v4 短网址是一个部署在自己服务器上的多用户短链接系统:生成短链、解短链、二维码生成/解析、积分经济、游客配额、短链与二维码过期时间、二维码生成统计管理,全套后台管理。

  • 定位:自用 / 团队用的短链服务,替代第三方短链平台,数据自主可控
  • 技术栈:PHP 8.2 原生(无框架)+ MySQL/SQLite 双兼容 + 原生 JS(qrcode.js / jsQR)
  • 设计风格:扁平化 + 多彩配色 + 深色主题切换 + 响应式
  • 入口:前台 index.php,后台 admin.php

目录结构

站点根目录/
├── index.php         # 前台入口(首页/登录注册/用户中心/解短链/建链API)
├── admin.php         # 后台入口(仪表盘/短链/用户/激活码/积分/权限/过期/二维码管理/快捷工具/设置/备份)
├── db.php            # 数据库封装、建表、全部业务函数(SQLite/MySQL 双兼容)
├── config.php        # 配置:数据库、短链域名、站点名、管理员密码
├── assets/
│   ├── style.css     # 全部样式(含深色主题变量)
│   ├── app.js        # 前台交互(建链/主题/二维码/复制)
│   ├── admin.js      # 后台交互
│   ├── qrcode.min.js # 二维码生成库
│   └── jsqr.min.js   # 二维码解析库
├── data/             # 数据目录(SQLite 模式放库文件,已加防下载保护)
├── nginx.conf.txt    # phpstudy Nginx 干净短链配置片段(示例)
└── favicon.ico

二、功能清单

前台(index.php)

| 功能 | 说明 | |---|---| | 生成短链 | 粘贴长链接生成短码;可选有效期;高级用户可自定义短码 | | 解短链 | 输入短码/短链/?u= 任意格式,显示原始地址+点击量,不跳转 | | 二维码生成 | 输入任意网址/文本生成本地二维码(工具 tab) | | 二维码解析 | 上传图片识别二维码内容(jsQR,本地处理) | | 游客配额 | 后台可设游客免费生成 N 条短链,Cookie 计数 | | 登录/注册 | 注册送积分;无邮箱验证(邮箱+密码) | | 使用帮助/权限对比 | 首页展示操作指引 + 各档位权限对比表 |

用户中心

  • 我的短链:短码/目标/点击/状态/过期/时间,复制、二维码、删除
  • 积分明细:每笔变动(加减、原因、时间)
  • 激活高级:输入激活码升级高级用户
  • 账号设置:改昵称、改密码

后台

| 菜单 | 功能 | |---|---| | 仪表盘 | 短链/启用中/点击/今日 统计 + 热门短链 + 用户统计 | | 短链管理 | 新建(含有效期)/搜索/按用户筛选/启停/编辑/删除 | | 用户管理 | 新增用户、启停、高级切换、+10/-10/自定义积分 | | 激活码 | 批量生成/导出 CSV/搜索/状态管理 | | 积分管理 | 总余额/今日发放/今日消耗 + 全用户流水(筛选/分页) | | 权限管理 | 5 项功能 × 游客/普通/高级 三档,即时生效 | | 过期时间 | 短链接默认有效期(三档)+ 二维码默认有效期(三档) | | 二维码管理 | 生成总次数/今日/独立/用户统计 + 记录列表(分类/来源/过期/删除/筛选) | | 快捷工具 | 二维码生成 + 解析(后台可用) | | 系统设置 | 站点名/描述/分页/短码长度/跳转类型/积分参数/游客次数/密码/备份 |


三、权限与积分体系

三档身份

| 身份 | 说明 | |---|---| | 游客 | 未登录;可解短链/二维码(按权限档位);可生成短链(按 guest_limit 配额) | | 普通用户 | 注册即得;建链扣积分;不能自定义短码 | | 高级用户 | 激活码升级;自定义短码 + 免费建链 + 激活赠送积分 |

权限表

| 功能 | 默认档位 | |---|---| | 生成短链 | 登录用户(游客另由配额控制) | | 自定义短码 | 高级用户 | | 解短链 | 所有人 | | 二维码生成 | 所有人 | | 二维码解析 | 所有人 |

积分规则

  • 注册赠送:credit_register(默认 20)
  • 每链消耗:credit_per_link(默认 1,高级用户 0)
  • 激活赠送:credit_activate(默认 100)
  • 管理员可对任意用户 +10/-10 或自定义任意数值(正负均可),实时写流水

激活码

  • 后台批量生成(可备注),支持导出 CSV
  • 一码一用,用过即失效;激活后 activated_at 记录时间

四、过期时间机制

规则:建链时若用户没选「有效期」,按创建者身份的默认值过期;到期后访问短链返回 410「链接已过期」。

设置项 含义
expire_guest / expire_user / expire_high 游客/普通/高级用户创建短链的默认有效期(天,0=永久)
qr_expire_guest / qr_expire_user / qr_expire_high 三档身份单独生成纯二维码的默认有效期(天,0=永久)

关键规则

  • 生成短链时附带的二维码 → 分类 short_link跟随短链过期(不单独计算)
  • 单独生成(工具 tab / 快捷工具)的二维码 → 分类 plain,按身份走 qrexpire* 默认值
  • 后台/用户中心的短链列表显示过期时间列,过期标红

五、二维码体系

  • 打点记录:前台四个入口(首页短链按钮/工具 tab/用户中心/解短链页)生成二维码自动记录到 qr_codes
  • 分类:短链二维码(home/center/expand 来源) vs 纯二维码(tool 来源)
  • 合并计数:同一用户 + 同一内容自动合并,count 累加
  • 后台二维码管理:4 张统计卡 + 记录列表(内容/生成者/分类/来源/次数/过期/删除)+ 按用户/分类/内容筛选分页

六、部署指南(phpstudy)

1. 准备

  • phpstudy 安装 PHP 8.2+(含 pdo_mysql/pdo_sqlite)、MySQL 5.7+
  • 站点根目录指向项目文件夹

2. 配置 config.php

define('DB_DRIVER', 'mysql');          // mysql 或 sqlite
define('DB_HOST', '127.0.0.1');
define('DB_NAME', '8v4');              // MySQL 库名(sqlite 模式忽略)
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('SHORT_DOMAIN', '8v4.com');     // 短链域名(不含协议)→ 换域名改这里
define('ADMIN_PASS', '8v4admin');      // 后台初始密码,上线务必修改

首次访问任意页面自动建表 + 写入默认配置,无需手动导 SQL。

3. Nginx 干净短链(可选)

短链想支持 域名/CODE 直接跳转,把 nginx.conf.txt 的 server 段合并进站点配置(改 server_nameroot),重启 Nginx。不配置也不影响功能(可用 ?u=CODE 访问)。

4. 验证

  • 前台 http://站点/index.php 正常显示
  • 注册 → 建链 → 访问短码 → 跳转成功
  • 后台 http://站点/admin.php → admin / 8v4admin 登录

七、换域名三步

  1. config.phpSHORT_DOMAIN 改为新域名
  2. Nginx:server_name 同步修改并重启
  3. 后台系统设置:修改站点名称

    已生成的短链不受影响(数据库存短码不存域名,跳转时现拼)。


八、安全设计

已内置防护

  • SQL 注入:全站 PDO 预处理参数化
  • XSS:输出统一 h() 转义;短链 404 页不回显用户输入
  • CSRF:所有 POST 均校验 token;session 无 token 一律拒绝(防"空==空"绕过)
  • 协议白名单:建链仅允许 http/https
  • 越权:删除/修改短链校验归属 user_id;游客无法访问后台(302)
  • 数据目录data/ 已加防下载(Apache .htaccess + Nginx deny)

运维注意事项

建议
后台密码 上线前修改初始密码
登录爆破 本地工具暂无验证码/限速,对外服务需加
注册刷积分 介意可把注册赠送调 0
邮箱验证 当前注册即登录,需验证码登录要配 SMTP(后续可加)
恶意跳转 建议后续加危险域名黑名单,防域名被钓鱼利用
微信/QQ 拦截 短链域名在聊天软件可能被拦截,先实测
PHP 缓存 改代码后若页面没变化,重启 phpstudy 的 PHP 服务

九、常见问题 FAQ

Q:改代码后页面没变化?

A:静态资源已带版本号会自动刷新;若 PHP 层没变,重启 phpstudy 的 PHP 服务(OPcache)。

Q:建链报 1292 Incorrect datetime value?

A:已修复(expire_at 空串转 NULL)。若再出现,确认部署目录的 db.php 已同步。

Q:游客生成了短链,后台"归属用户"显示什么?

A:显示"未归属"(user_id=0),可按用户筛选查看。

Q:二维码管理里为什么没记录?

A:需刷新页面加载新版 app.js(已带版本号);确认生成二维码时弹窗正常打开。

Q:MySQL 和 SQLite 数据能互导吗?

A:后台"一键备份"导出 SQL;切换驱动需重建表并导入数据(同库结构)。

Q:过期时间到期的链接还能恢复吗?

A:后台编辑链接把过期时间改未来/永久即可(当前编辑表单未提供过期修改,可后续加)。


本文档随项目迭代更新,如有出入以代码为准。

💬 留言 共 0 条 · 登录后可留言
还没有留言,来抢沙发~