基于 PHP 构建的轻量级临时文件存放与分享程序,支持大文件分块上传、断点续传、管理后台。
jirafeau-clone/
├── index.php # 主上传页面(拖拽 + 进度条 + 断点续传)
├── upload_handler.php # 直传处理(≤50 MB)
├── upload_init.php # 分块上传初始化(创建会话)
├── upload_chunk.php # 分块上传接收单块数据
├── upload_complete.php # 分块上传完成组装
├── upload_progress.php # 上传进度查询
├── download.php # 文件下载 / 分享 / 删除
├── admin.php # 密码保护的管理后台
├── cleanup.php # 过期文件清理(CLI + Web)
├── config.php # 配置文件
├── functions.php # 核心函数库
├── .htaccess # Apache 安全规则
├── assets/
│ ├── css/style.css # 样式表
│ └── js/upload.js # 前端上传交互
├── uploads/ # 文件存储目录
│ └── .htaccess # 禁止直接访问
├── data/ # 元数据存储目录
│ ├── .htaccess # 禁止直接访问
│ └── chunks/ # 分块临时存储
│ └── .htaccess
└── README.md## 部署方式
php -S localhost:8080 -t jirafeau-clonebash访问 http://localhost:8080。
将项目目录设为网站根目录,确保:
uploads/、data/、data/chunks/ 目录可写upload_max_filesize ≥ 4096M(如需 4 GB 上传)post_max_size > upload_max_filesizeNginx 配置示例:
server {
listen 80;
server_name your-domain.com;
root /path/to/jirafeau-clone;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问敏感目录
location ~ ^/(uploads|data)/ {
deny all;
}
}nginx### 3. 定时清理
建议配置 cron 定期执行清理脚本:
*/5 * * * * php /path/to/jirafeau-clone/cleanup.phpbash也可通过浏览器访问 http://your-domain.com/cleanup.php 手动触发。
编辑 config.php:
| 配置项 | 说明 | 默认值 |
|---|---|---|
SITE_NAME | 站点名称 | TempShare - 临时文件分享 |
MAX_FILE_SIZE | 单文件最大大小(MB) | 4096(4 GB) |
CHUNK_SIZE | 分块大小(字节) | 5 * 1024 * 1024(5 MB) |
ADMIN_PASSWORD_HASH | 管理员密码哈希 | admin123(请立即修改) |
ONE_TIME_DOWNLOAD | 是否一次性下载 | false |
FORBIDDEN_EXTENSIONS | 禁止上传的扩展名 | 37 种危险类型 |
EXPIRY_OPTIONS | 文件有效期选项 | 1h / 6h / 12h / 1d / 3d / 7d |
php -r "echo password_hash('你的新密码', PASSWORD_BCRYPT) . PHP_EOL;"bash将输出结果替换 config.php 中的 ADMIN_PASSWORD_HASH。
文件选择
│
├─ ≤ 50 MB → 直传模式(upload_handler.php)
│
└─ > 50 MB → 分块模式:
├── POST upload_init.php → 创建上传会话 / 断点恢复
├── POST upload_chunk.php → 并发上传每块(5 MB/块,最多 3 并发)
└── POST upload_complete.php → 校验并组装文件 → 生成分享链接断点续传通过 localStorage 存储上传会话 ID,刷新或重新打开页面时自动检测并提示恢复。
访问 http://your-domain.com/admin.php,默认密码 admin123。
功能:
| 防护 | 实现方式 |
|---|---|
| 路径穿越 | Token / UploadId 格式严格校验(hex) |
| CSRF | 所有管理操作需 Session CSRF Token |
| XSS | Content-Type 强制服务端 finfo 检测 + Content-Disposition RFC 5987 |
| Session 固定 | 登录后 session_regenerate_id(true) |
| 暴力破解 | 5 次失败锁定 15 分钟 + sleep(1) 延迟 |
| 文件类型 | 37 种危险扩展名黑名单 |
| 响应头 | nosniff / DENY / no-referrer / XSS-Protection |
| IP 伪造 | 不信任 X-Forwarded-For,仅使用 REMOTE_ADDR |
MIT License