项目说明

功能、安装、常见问题

BLOCK0

/

├── index.php 前台首页(调用模板系统渲染)

├── install.php 安装向导(4 步)

├── docs.php 开发文档查看页

├── config.php 由安装向导生成

├── install.lock 安装锁

├── README.md

├── data/ SQLite 数据文件目录(安装时自动创建)

│

├── includes/ 核心类库

│ ├── bootstrap.php 引导(加载配置、类库、启动 session)

│ ├── Helpers.php 全局函数(json_ok / input / csrf / e 等)

│ ├── db.php PDO 单例

│ ├── Auth.php 认证 + 邮箱验证 + 权限判断 + 封禁时间

│ ├── Setting.php 站点设置键值表

│ ├── Points.php 积分变更 / 流水 / 统计

│ ├── ApiClient.php 彩虹DNS API 客户端

│ ├── Mailer.php 内嵌 SMTP 发信

│ ├── Subdomain.php 二级域名申请 / 修改 / 删除 / 可用性查询

│ ├── Reserved.php 保留词(前缀匹配)

│ ├── Checkin.php 每日签到

│ ├── Redeem.php 兑换码

│ ├── Invite.php 邀请码

│ ├── AdminLog.php 管理员操作日志

│ ├── Template.php 模板系统

│ ├── Popup.php 前台访客弹窗

│ └── Markdown.php 轻量 Markdown 渲染(文档页用)

│

├── api/ 接口层

│ ├── public.php 公开接口(可用性查询、统计、公告)

│ ├── auth.php 认证接口

│ ├── subdomain.php 解析接口

│ ├── checkin.php 签到接口

│ ├── redeem.php 兑换码接口

│ ├── admin.php 后台管理接口

│ ├── user.php 用户端 API(申请 / 重新生成 Token)

│ ├── v1.php 开放 API v1

│ └── API.md 开放 API 文档

│

├── admin/ 后台

│ ├── index.php 入口路由

│ ├── includes/

│ │ └── layout.php 后台布局(优先加载模板)

│ └── pages/ 各功能页面

│ ├── dashboard.php 概览

│ ├── users.php 用户管理

│ ├── user_groups.php 用户组管理

│ ├── api_requests.php API 申请审核

│ ├── dns_interfaces.php DNS 接口

│ ├── domains.php 域名管理

│ ├── subdomains.php 解析记录

│ ├── reserved_words.php 保留词

│ ├── redeem_codes.php 兑换码

│ ├── announcements.php 公告

│ ├── home_editor.php 首页编辑

│ ├── point_logs.php 积分流水

│ ├── admin_logs.php 操作日志

│ ├── settings.php 站点设置

│ ├── templates.php 模板管理

│ ├── login.php 后台登录

│ └── logout.php 退出

│

├── user/ 用户中心

│ ├── index.php 入口路由

│ ├── includes/

│ │ └── layout.php 用户中心布局(优先加载模板)

│ └── pages/ 各功能页面

│ ├── dashboard.php

│ ├── apply.php

│ ├── my_subdomains.php

│ ├── checkin.php

│ ├── redeem.php

│ ├── invite.php

│ ├── point_logs.php

│ ├── api.php API Token 申请

│ ├── profile.php

│ ├── login.php

│ ├── register.php

│ ├── forgot.php

│ ├── reset.php

│ ├── verify.php

│ └── logout.php

│

├── templates/ 模板

│ ├── README.md 模板开发文档

│ ├── default/ 前台模板(现代版)

│ │ ├── template.json

│ │ ├── index.php

│ │ ├── login.php

│ │ ├── register.php

│ │ ├── forgot.php

│ │ ├── reset.php

│ │ ├── verify.php

│ │ └── layouts/

│ │ ├── header.php

│ │ ├── footer.php

│ │ └── user.php

│ ├── classic/ 前台模板(第一版配色)

│ │ ├── template.json

│ │ ├── index.php

│ │ ├── login.php

│ │ ├── register.php

│ │ ├── forgot.php

│ │ ├── reset.php

│ │ ├── verify.php

│ │ ├── layouts/

│ │ │ └── user.php

│ │ └── assets/

│ │ └── style.css

│ └── admin/ 后台模板

│ ├── default/

│ │ ├── template.json

│ │ └── layout.php

│ └── classic/

│ ├── template.json

│ ├── layout.php

│ └── assets/

│ └── style.css

│

└── assets/

├── css/

│ ├── common.css 全站公共样式

│ ├── home.css 首页专用

│ ├── user.css 用户中心专用

│ ├── admin.css 后台专用

│ └── docs.css 文档页专用

└── js/

├── common.js 公共 JS(window.$app)

├── home.js 首页脚本

├── user.js 用户中心脚本

└── admin.js 后台脚本

BLOCK1json

{

"name": "我的模板",

"author": "你的名字",

"version": "1.0.0",

"description": "一句话描述",

"pages": ["index", "login", "register", "forgot", "reset", "verify"]

}

BLOCK2bash

curl -H "Authorization: Bearer YOUR_TOKEN" \

"https://example.com/api/v1.php?action=me"

BLOCK3sql

ALTER TABLE users ADD COLUMN ban_until VARCHAR(255) DEFAULT NULL;

ALTER TABLE users ADD COLUMN ban_count INT DEFAULT 0;

ALTER TABLE users ADD COLUMN api_status INT DEFAULT 0;

ALTER TABLE users ADD COLUMN api_apply_at VARCHAR(255) DEFAULT NULL;

ALTER TABLE users ADD COLUMN api_review_at VARCHAR(255) DEFAULT NULL;

ALTER TABLE users ADD COLUMN api_review_by INT DEFAULT 0;

ALTER TABLE users ADD COLUMN api_reject_reason TEXT DEFAULT '';

CREATE TABLE IF NOT EXISTS user_ban_logs (

id INT AUTO_INCREMENT PRIMARY KEY,

user_id INT NOT NULL,

admin_id INT NOT NULL DEFAULT 0,

reason VARCHAR(255) DEFAULT '',

ban_until VARCHAR(255) DEFAULT NULL,

action VARCHAR(255) DEFAULT 'ban',

created_at DATETIME DEFAULT CURRENT_TIMESTAMP

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT IGNORE INTO site_settings (skey, svalue, description) VALUES

('favicon_url', '', ''),

('default_admin_log_remark', '', ''),

('user_api_enabled', '0', ''),

('user_api_need_review', '0', ''),

('docs_enabled', '1', '');

BLOCK4sql

ALTER TABLE users ADD COLUMN ban_until TEXT DEFAULT NULL;

ALTER TABLE users ADD COLUMN ban_count INTEGER DEFAULT 0;

ALTER TABLE users ADD COLUMN api_status INTEGER DEFAULT 0;

ALTER TABLE users ADD COLUMN api_apply_at TEXT DEFAULT NULL;

ALTER TABLE users ADD COLUMN api_review_at TEXT DEFAULT NULL;

ALTER TABLE users ADD COLUMN api_review_by INTEGER DEFAULT 0;

ALTER TABLE users ADD COLUMN api_reject_reason TEXT DEFAULT '';

CREATE TABLE IF NOT EXISTS user_ban_logs (

id INTEGER PRIMARY KEY AUTOINCREMENT,

user_id INTEGER NOT NULL,

admin_id INTEGER NOT NULL DEFAULT 0,

reason TEXT DEFAULT '',

ban_until TEXT DEFAULT NULL,

action TEXT DEFAULT 'ban',

created_at TEXT DEFAULT (datetime('now','localtime'))

);

INSERT OR IGNORE INTO site_settings (skey, svalue, description) VALUES

('favicon_url', '', ''),

('default_admin_log_remark', '', ''),

('user_api_enabled', '0', ''),

('user_api_need_review', '0', ''),

('docs_enabled', '1', '');

BLOCK5