Files
2026-06-24 17:45:24 +08:00

6.4 KiB
Raw Permalink Blame History

软件发布平台完善计划

项目目标

将现有的简单下载页面升级为功能完整的软件发布平台,包含后端管理、版本管理和配置系统。

技术方案

数据库选择

  • 使用 SQLite 作为文件数据库(轻量、无需额外配置)
  • 数据库文件路径:data/database.db

数据库设计

apps 表 - 存储应用版本信息

CREATE TABLE apps (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    filename TEXT NOT NULL,
    original_name TEXT NOT NULL,
    version TEXT,
    description TEXT,
    upload_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    file_size INTEGER
);

config 表 - 存储网站配置

CREATE TABLE config (
    key TEXT PRIMARY KEY,
    value TEXT
);

预设配置项:

  • site_title - 网站标题(默认:"OPS 运营管理系统"
  • site_description - 软件说明(默认:"点击下方按钮下载移动端 APP")
  • logo_path - Logo 路径(默认:"logo.png"

目录结构

php_app_downloader/
├── index.php                 # 主页(显示所有版本)
├── download.php              # 下载接口(支持按ID下载)
├── logo.png                  # 默认 Logo
├── admin/                    # 管理后端目录
│   ├── index.php            # 登录页面
│   ├── dashboard.php        # 管理面板主页
│   ├── upload.php           # 文件上传处理
│   ├── config.php           # 配置管理页面
│   ├── delete.php           # 删除应用接口
│   ├── logout.php           # 登出
│   └── auth.php             # 认证中间件
├── includes/                 # 共享代码
│   ├── db.php               # 数据库连接和初始化
│   └── functions.php        # 通用函数
├── data/                     # 数据存储目录
│   ├── apps/                # 上传的 APK 文件
│   ├── uploads/             # 上传的 Logo
│   └── database.db          # SQLite 数据库
└── assets/                   # 静态资源
    └── admin.css            # 管理后台样式

实现步骤

1. 创建基础设施(includes/

1.1 数据库连接(includes/db.php

  • 创建 SQLite 连接
  • 自动初始化数据库结构(如果不存在)
  • 插入默认配置数据

1.2 通用函数(includes/functions.php

  • getConfig($key) - 获取配置
  • updateConfig($key, $value) - 更新配置
  • formatFileSize($bytes) - 格式化文件大小
  • isLoggedIn() - 检查登录状态

2. 创建目录结构

  • 创建 data/, data/apps/, data/uploads/, admin/, includes/, assets/
  • 设置适当的权限(777 for data/ 及子目录)

3. 实现管理后端(admin/

3.1 登录页面(admin/index.php

  • 简洁的登录表单
  • 默认用户名/密码:admin/admin
  • 使用 Session 管理登录状态
  • 成功后跳转到 dashboard.php

3.2 认证中间件(admin/auth.php

  • 检查 Session 中的登录状态
  • 未登录则重定向到登录页面
  • 被其他后台页面 include

3.3 管理面板(admin/dashboard.php

  • 显示所有已上传的应用版本(表格形式)
  • 上传新应用的表单(文件 + 版本号 + 描述)
  • 删除应用的功能
  • 链接到配置页面

3.4 文件上传处理(admin/upload.php

  • 接收 POST 请求
  • 验证文件类型(仅允许 .apk
  • 生成唯一文件名(时间戳_原文件名)
  • 移动文件到 data/apps/
  • 插入数据库记录
  • 返回 JSON 响应或重定向

3.5 配置管理(admin/config.php

  • 表单显示当前配置
  • 网站标题输入框
  • 软件说明文本框
  • Logo 上传(支持 jpg/png/gif
  • 保存到数据库
  • Logo 上传到 data/uploads/ 并更新配置

3.6 删除接口(admin/delete.php

  • 接收 app ID
  • 从数据库删除记录
  • 删除物理文件
  • 重定向回 dashboard

3.7 登出(admin/logout.php

  • 销毁 Session
  • 重定向到登录页面

4. 更新前端

4.1 主页(index.php

功能改进:

  • 从数据库读取配置(标题、说明、Logo)
  • 显示所有已发布的应用版本列表(不只是最新的一个)
  • 每个版本显示:版本号、描述、上传时间、文件大小
  • 最新版本在最前面(ORDER BY upload_time DESC

样式重写:

  • 现代化的卡片布局
  • 响应式设计(移动端友好)
  • 更好的视觉层次
  • 使用渐变背景和阴影效果
  • 每个版本一个下载按钮

4.2 下载接口(download.php

功能改进:

  • 接收 id 参数(GET 请求)
  • 从数据库查询应用信息
  • 返回文件路径用于下载
  • 保留向后兼容(如果没有 id,返回最新版本)

5. 管理后台样式(assets/admin.css

  • 简洁的管理界面样式
  • 表格样式
  • 表单样式
  • 按钮和交互元素
  • 侧边栏导航(可选)

安全考虑

  1. 文件上传安全:

    • 验证文件扩展名
    • 限制文件大小
    • 使用随机文件名防止覆盖
  2. 认证安全:

    • 使用 Session 管理
    • 密码硬编码(后续可改为数据库存储的加密密码)
  3. SQL 注入防护:

    • 使用 PDO 预处理语句
  4. XSS 防护:

    • 输出时使用 htmlspecialchars()

实现顺序

  1. 创建目录结构
  2. 实现 includes/db.php(数据库初始化)
  3. 实现 includes/functions.php
  4. 实现 admin/index.php(登录页面)
  5. 实现 admin/auth.php
  6. 实现 admin/dashboard.php
  7. 实现 admin/upload.php
  8. 实现 admin/config.php
  9. 实现 admin/delete.php
  10. 实现 admin/logout.php
  11. 更新 index.php(前端)
  12. 更新 download.php
  13. 创建 assets/admin.css
  14. 测试所有功能

验证清单

  • 可以登录管理后台(admin/admin
  • 可以上传 APK 文件
  • 上传的文件保存在 data/apps/
  • 主页显示所有版本,最新的在前
  • 可以下载各个版本
  • 可以在后台删除版本
  • 可以配置网站标题
  • 可以配置软件说明
  • 可以上传和更换 Logo
  • 前端样式美观且响应式

预计文件清单

新建文件:

  • admin/index.php
  • admin/dashboard.php
  • admin/upload.php
  • admin/config.php
  • admin/delete.php
  • admin/logout.php
  • admin/auth.php
  • includes/db.php
  • includes/functions.php
  • assets/admin.css

修改文件:

  • index.php
  • download.php

创建目录:

  • data/
  • data/apps/
  • data/uploads/
  • admin/
  • includes/
  • assets/