Both READMEs had grown into an upstream-style append log ("What's new in
v1.7 / v1.8 / v1.8.1 / v1.8.2 / v1.9 / v1.9.2 / v1.9.3M") that also dropped
several features the upstream README still documents. Rewrite both as
feature-oriented descriptions with one shared outline.
- README.md, README.zh-CN.md: feature-oriented rewrite. New sections for
the archive support matrix, limits and safety, conflict policy,
password handling, what is deliberately not built, and an
upstream-vs-us comparison table that includes the rows where upstream
wins.
- Add header badges (release / license / target / downloads) and two
for-the-badge buttons (Download, beginner's guide). The release badge
reads github/v/release so it tracks the latest release instead of
hard-coding a version; colours are pinned so they do not clash.
- CHANGELOG.md: write the missing [v1.9.1] and [v1.9.2] body sections
before that prose was removed from the README, so nothing was lost.
- Fix 4 dead links to third_party/unrar/ (renamed unrar7/ in v1.9) and one
reference to a README section that no longer exists.
- HANDOVER.md: update the handover commit and README structure note.
Documentation only. No binary rebuild, and tag v1.9.3M with its release
asset is untouched.
Verified: link + anchor audit across the tree (now including raw HTML
href/src, not just Markdown syntax) reports 0 problems; table column
counts consistent; bold pairing clean; the new header renders with 6/6
badges loaded at both 1280px and 420px viewports and no horizontal
overflow.
8.8 KiB
PS5 网页文件管理器 v1.9.2(自编译版)发布 + 与上游原版对比 + 使用简介
这是我自己维护的一个分支版本,基于 owendswang 的
ps5-web-file-manager二次开发。本文讲三件事:它和上游原版差在哪、我这个版本强在哪、怎么用。
一、它是什么
一个在已越狱 PS5 上跑的 HTTP 文件管理器(单文件 ELF 载荷)。局域网内任意浏览器(含 PS5 自带浏览器)打开 http://<PS5的IP>:8888/ 就能管理外接 USB 和内置存储:浏览、改权限、上传、下载、原地编辑文本、装/预览 PKG、看图,以及解压 ZIP / RAR / 7z。
- 版本:v1.9.2
- 标题 ID:
FMGR88888 - 许可证:GPLv3+
- 目标平台:
x86_64-sie-ps5(Zen 2,不是 ARM)
关于版本号:v1.9.2 与 v1.9.1 功能完全相同,只更新了内嵌版本号。原先的
v1.9.1tag 打在了产出发布二进制的提交之前 4 个提交,导致"tag 对应的源码"重建不出发布的那份 ELF;v1.9.2 重新从正确提交上打,使 tag = 源码 = 二进制。
二、和上游原版(owendswang v1.8)对比
先说结论:不是同一条路线,各有胜负手。
| 维度 | 上游 owendswang v1.8 | 我的 v1.9.2 |
|---|---|---|
| 一句话定位 | 把 7-Zip 本体做成外部 helper 进程,靠 IPC 调用 | 自研 / vendor 解码库,全部内嵌同一进程 |
| 支持的压缩格式 | 30 种(zip/7z/rar/tar/gz/xz/zst/bz2/cab/arj…) | 3 种:ZIP / RAR / 7z |
| 部署方式 | 两个文件,helper 必须放 /data/wfm/ 指定路径 |
单个 ELF,零外部依赖 |
| 载荷体积 | 主程序 + 7-Zip 本体(两份) | 850 KiB 单文件(含 ZIP/RAR/7z 三个解码引擎) |
| 防压缩炸弹(zip bomb) | ❌ 无 | ✅ 压缩比上限 + 1 GiB 下限豁免 |
| 磁盘写满保护 | ❌ 无 | ✅ 解压前按实际剩余空间 statvfs 预检 |
| 路径穿越防护 | ❌ 无(交给 7-Zip) | ✅ 有专项测试 |
| 解压中断留残留 | ⚠️ 可能留半成品 | ✅ staging 隔离,失败即清 |
| 解压任务跨重启恢复 | ✅ helper 独立进程,重启不丢 | ❌ 暂无 |
| 内存隔离 | ✅ 独立进程 | ❌ 与主程序共享地址空间 |
| 错误信息详细度 | 中等 | ✅ 含条目名 / errno / 字节数 |
| 解压核心正确性 | 7-Zip 本体(20 年验证) | 自研 7z 链 + 成熟 vendor 库 |
上游原版强在哪
- 格式多:30 种,常见游戏包/备份/Mod 里
.tar.gz、.xz、.zst、.bz2都能直接解。 - 任务恢复:helper 是独立进程,主程序被系统杀掉或浏览器重开,大包解压不丢。
- 内存隔离:解压峰值不影响主文件服务。
我的版本强在哪
- 安全护栏齐全:压缩炸弹、写满磁盘、路径穿越、中断残留——这四项上游一个都没有,而我这边都有实现和测试(测试矩阵 163 项检查,0 失败)。说白了,一个恶意压缩包不会把你的内置存储搞崩。
- 单文件部署:丢一个 ELF 就行,不用记第二个文件该放哪;helper 丢了功能全废的事在我这不存在。
- 7z 引擎是硬啃出来的:上游靠 7-Zip 本体"白嫖",我这边是自己解析 7z folder + 拉式 codec 链,原生支持 BCJ2 反汇编后处理和多 coder 组合,还顺手做了多线程 LZMA2 解码(约 1.37×)和汇编 LZMA 解码器(约 1.26×)。
- RAR 用官方 UnRAR 7.20.1:能解 WinRAR 6.x/7.x 写的 RAR5「v6」归档和多卷 RAR——上游原版的旧引擎在这类文件上会报"归档损坏"。
我不回避的短板
- 格式覆盖只有 3 种,这是最明显的弱项。
.tar.gz、.xz、.zst、.bz2你现在还得在 PC 上先解开。这是我接下来增量要补的方向(tar+zlib 已有、xz/lzma 复用 LZMA SDK、bz2/zst 可 vendor 单文件解码器),但不打算照抄上游的 helper 路线——那样会丢掉上面那些安全护栏和单文件部署优势。 - 任务跨重启恢复和内存隔离暂时没有(和"单进程内嵌"的架构取舍有关)。
一句话:上游赢在"格式广度 + 进程架构",我赢在"安全 + 部署 + 错误质量"。
三、v1.9.2 / v1.9.1 我做了哪些具体改进
- 7z 解压引擎:自研解码子集 + 拉式 codec 链(
sevenz_chain.c),支持 LZMA2 / LZMA / BCJ2,覆盖 SDKSzArEx装不下的 5-coder 文件夹。 - 分卷(多卷)支持:三种格式都支持分卷,但命名约定不同(引擎按文件名自动识别,打开首个分卷即可):
- ZIP 分卷:① 经典多磁盘
name.z01 … name.zNN … name.zip(索引目录固定在最后一个.zip);② 7-Zip 字节分割name.zip.001 / .002 / …;③ WinRAR 卷name.part1.zip … name.partN.zip。最多 512 卷。 - 7z 分卷:7-Zip 字节分割
name.7z.001 / .002 / …,各分卷需等大,打开首个即可。最多 512 卷。 - RAR 分卷:标准多卷
name.part1.rar / .part2.rar / …(unrar 自动按名合并)。注意:用 7-Zip 切出来的name.rar.001这种命名暂不支持,引擎会提示你先把分卷改名成.partN.rar再解。
- ZIP 分卷:① 经典多磁盘
- 性能三项(纯解码提速,不影响功能):
- 汇编 LZMA 解码器 ≈ 1.26×
- 纯 LZMA2 多线程解码(8 线程)≈ 1.37×
- 移除 ZIP 逐条目 fsync,减少写盘开销
- RAR 升级到官方 UnRAR 7.20.1:RAR5「v6」+ 多卷可用(v1.8 时代在 WinRAR 6/7 文件上报"归档损坏"的问题已消失)。
- 载荷瘦了 15.8%(1,034,328 → 870,488 字节):链接期去掉了 libc++abi 里一段永远不会执行的 C++ 名字还原器(只服务于"未捕获异常打印类型名"这条路径),再加上相同机器码折叠。不损失任何功能,也不影响解压速度。
- 上传更顺手:点上传按钮直接选文件或文件夹(不再弹二级菜单);支持把文件/文件夹直接拖到页面上上传。
- 中英双语界面 + 项目主页右上角可切换语言说明。
已知缺口(诚实列出)
本节描述的是 v1.9.2 发布时的状态。此后补齐的两条缺口 —— 加密 ZIP/RAR 与 7z
-mhe=on加密头 —— 已随 v1.9.3M 发布。详见 README 的「压缩包支持」一节、CHANGELOG.md的[v1.9.3M]段,以及HANDOVER.md§十一 / §十二。
- 带密码的 ZIP / RAR / 7z:拒绝解压(引擎有解密能力,但密码输入 UI/API 还没接,临时先挡掉)。
- 7z
-mhe=on加密头:暂不支持(需要自研头解析器)。这是 7z 侧唯一已知缺口。
四、使用简介(三步上手)
1. 把 ELF 发到 PS5
PS5 上先运行一个 ELF 加载器(端口 9021 常见),然后在 PC 上:
# 把 PS5_IP 换成你主机实际 IP
nc -q0 <PS5的IP> 9021 < web-file-mgr-v1.9.2.elf
PS5 屏幕会弹通知,显示实际监听端口(默认 8888)。首次运行还会在主屏 Media 分类装一个「PS5 Web File Manager」快捷方式。
2. 浏览器打开
同一局域网下,任意设备浏览器打开:
http://<PS5的IP>:8888/
PS5 自带浏览器也能开。
3. 日常操作
- 浏览/管理:列文件、排序、改权限、复制/移动/重命名/删除、原地编辑文本(≤1 MiB 的 txt/json/js/c/h…)。
- 上传下载:单文件或文件夹树上传(也可直接拖拽到页面);文件夹/多选以
.tar流式下载。 - 解压:在文件列表里点 ZIP / RAR / 7z 的「解压」按钮即可。大档案(>480 GiB)会弹确认提示,确认后用更宽松的限额解压。
- 冲突策略:同名文件默认拒绝覆盖;需要时可选覆盖或合并。
五、下载与校验
请在 GitHub Release 页面下载:
https://github.com/lishersong/ps5-web-file-manager/releases/tag/v1.9.2
发布文件:web-file-mgr-v1.9.2.elf
| 项目 | 值 |
|---|---|
| 大小 | 870,488 字节(约 850 KiB) |
| sha256 | 177e90fecf93a0251e83f67884fba4551051be248330b0d70fda8ea732f88e84 |
| 文件类型 | ELF 64-bit LSB,x86-64(e_machine 0x003e,即 PS5 目标三元组) |
下载后建议先核对 sha256 再发到主机:
sha256sum web-file-mgr-v1.9.2.elf
# 应等于 177e90fecf93a0251e83f67884fba4551051be248330b0d70fda8ea732f88e84
本次构建是可复现的:同一份源码树连编两次 sha256 完全相同。所以这个哈希可以放心当交付指纹用。
六、免责声明
非官方自制软件,仅在已越狱 PS5 上运行。使用风险自负——作者不对损坏、数据丢失、账号处罚或保修影响负责。请勿再分发 Sony 专有内容。依 GPLv3+,本分支修改后的源码已公开在上面的仓库。
想继续补 .tar.gz / .xz 等格式、或接上密码解压 UI 的,欢迎在仓库提 issue。