一个基于 PHP 8+ / MySQL / PDO 的纯 PHP 团队文件管理系统,支持注册审核、角色权限控制、文件分类、上传下载、在线预览与操作日志。
- 用户注册 / 登录 / 退出
- 密码加密存储:
password_hash/password_verify - Session 鉴权
- RBAC 角色:
admin、user - 注册审核机制:新用户默认待审核,管理员审核通过后才可登录
- 文件上传(最大 20MB)
- 文件下载(统一经
download.php) - 文件删除
admin:可将任意文件放入回收站user:仅可将自己上传的文件放入回收站
- 回收站(仅管理员)
- 查看已删除文件
- 恢复文件(支持批量)
- 彻底删除文件(支持批量)
- 文件重命名(管理员或上传者本人)
- 文件分类(后台可增删分类)
- 文件搜索与分类筛选
- 分享链接(所有用户可创建)
- 支持设置有效期
- 支持设置访问密码
- 支持设置最大下载次数
- 分享管理(仅管理员)
- 查看已创建分享链接
- 手动失效分享链接
- 重置下载次数
pdf:站内 iframe 直接预览docx/pptx/xlsx:使用 Office Online 嵌入预览- 预览入口通过
preview.php,并对 Office 预览使用短期签名 URL
- 全部数据库读写使用 PDO 预处理语句
- 上传文件扩展名白名单:
pdf/docx/pptx/xlsx/zip - MIME 类型校验,防止扩展名伪造
- 存储目录禁止直接访问(
storage/.htaccess) - 所有敏感操作均校验登录态 + CSRF Token
- PHP 8.0+
- MySQL 5.7+ / 8.0+
- Bootstrap 5
- 纯 PHP(无框架)
Online-File-Manager/
├── admin.php # 管理后台(分类、用户、审核、日志)
├── auth.php # 登录态与权限校验、CSRF
├── config.php # 数据库连接、系统配置、兼容迁移
├── delete.php # 删除文件(权限校验)
├── download.php # 文件下载入口
├── functions.php # 业务函数(分类/文件/校验/日志/预览签名)
├── index.php # 文件列表页(搜索、筛选、重命名、预览)
├── init.sql # 数据库初始化脚本
├── login.php # 登录
├── logout.php # 退出
├── preview.php # 文件在线预览流接口
├── register.php # 注册(默认待审核)
├── recycle_bin.php # 回收站(仅管理员)
├── share.php # 分享链接创建与访问下载
├── share_manage.php # 分享管理(仅管理员)
├── upload.php # 上传页
├── README.md
├── assets/
│ └── style.css
├── partials/
│ ├── header.php
│ └── footer.php
└── storage/ # 文件存储目录(按 年/月 自动建目录)
├── .htaccess
└── index.html
将项目放置于站点目录,例如:
/www/wwwroot/Online-File-Manager编辑 config.php:
define('DB_HOST', '127.0.0.1');
define('DB_PORT', '3306');
define('DB_NAME', '你的数据库名');
define('DB_USER', '你的数据库用户名');
define('DB_PASS', '你的数据库密码');导入 init.sql:
mysql -u <db_user> -p <db_name> < init.sql默认管理员账号:
- 用户名:
admin - 密码:
Admin@123
首次运行时,
config.php内置了users审核字段兼容补齐逻辑(is_approved、approved_at)。
在 php.ini 中设置:
file_uploads = On
upload_max_filesize = 20M
post_max_size = 25M修改后重启 PHP-FPM / Web 服务。
项目已提供 storage/.htaccess,禁止目录访问。
location ^~ /storage/ {
deny all;
return 403;
}index.php:文件列表、搜索、分类筛选、下载、预览、重命名、删除recycle_bin.php:回收站(管理员可恢复或彻底删除)upload.php:上传文件并选择分类login.php:登录register.php:注册(提交后待管理员审核)admin.php:分类管理、用户管理、注册审核、操作日志download.php:下载入口(防止直接暴露存储目录)preview.php:在线预览入口share.php:分享链接创建与受控下载入口(有效期/密码/次数)share_manage.php:分享管理页(管理员查看/失效/重置次数)
adminuser
| 功能 | admin | user |
|---|---|---|
| 登录系统 | ✅ | ✅(需审核通过) |
| 上传文件 | ✅ | ✅ |
| 下载文件 | ✅ | ✅ |
| 重命名文件 | ✅ | ✅(仅本人上传) |
| 删除文件 | ✅(任意文件) | ✅(仅本人上传) |
| 创建分享链接(有效期/密码/次数) | ✅ | ✅ |
| 分享管理(查看/失效/重置次数) | ✅ | ❌ |
| 回收站查看/恢复/彻底删除 | ✅ | ❌ |
| 分类管理 | ✅ | ❌ |
| 用户管理/审核 | ✅ | ❌ |
- 用户在
register.php提交注册 - 系统创建用户并设置
is_approved = 0 - 用户尝试登录时会被提示“待审核”
- 管理员在
admin.php -> 用户管理执行“审核通过” - 用户审核通过后可正常登录
数据库初始化脚本在 init.sql,包含 5 张业务表:
users- 账号基础信息、角色、审核状态
- 关键字段:
username、email、password_hash、role、is_approved
files- 文件元数据与上传者、分类关联
- 关键字段:
original_name、stored_path、file_ext、mime_type、uploader_id、deleted_at、deleted_by
categories- 文件分类表
file_logs- 操作日志(上传/删除/重命名/下载)
file_shares- 文件分享链接控制表
- 关键字段:
share_token、password_hash、expires_at、max_downloads、download_count
- 存储根目录:
storage/ - 自动按
年/月建目录,例如:storage/2026/02/ - 保存名自动重命名:
时间戳_随机数.扩展名 - 数据库存储相对路径:
stored_path
- PDF:直接使用浏览器内置 PDF 能力展示
- Office 文件(docx/pptx/xlsx):通过 Office Online 预览
- Office 预览需要公网可访问站点 URL(Office 服务需要拉取源文件)
- 如果预览失败,可使用“新窗口打开”或“下载”
- 数据库未导入
init.sql,或config.php的库名与实际不一致。
- 多处复用同名命名参数导致,当前版本已修复为独立参数绑定。
- 当前版本已调整删除流程顺序:先写日志,再删文件记录。
- 请清缓存强刷页面;当前版本已修复前端触发与签名预览链路。
- 登录页:
/login.php - 文件列表:首页:
/index.php - 管理后台:
/admin.php - 分享管理:
/share_manage.php(管理员)