不能。webman 本身不是文件服务框架,不内置大文件上传、断点续传、分片合并、存储路由、元数据索引或权限树校验等网盘核心能力,必须依赖外围组件补足;硬用 $_files + move_uploaded_file() 处理 gb 级文件会导致内存耗尽、超时及协程阻塞。

Webman 能不能直接当企业网盘后端?
不能。Webman 本身不是文件服务框架,它不处理大文件上传、断点续传、分片合并、存储路由、元数据索引或权限树校验——这些是网盘的核心能力,必须靠外围组件补足。硬用 $_FILES + move_uploaded_file() 接收 GB 级文件,会吃光内存、触发超时、卡死协程调度器。
大文件上传必须绕开 PHP 原生 upload_max_filesize 限制
Webman 的 HTTP 请求体默认走 Swoole 的 http_server,而 Swoole 对 POST body 大小有硬限制(package_max_length),且原生 PHP 的 upload_max_filesize 和 post_max_size 在常驻进程中只生效一次,改了也 reload 不生效。
- 前端必须用分片上传(如
web-upload或uppy),每片 ≤ 5MB,带md5校验和分片序号 - 后端用
Swoole\Coroutine\Http\Request::rawContent()接原始流,避免解析 multipart/form-data 开销 - 分片落地前先写入临时目录(如
runtime/uploads/{upload_id}/{chunk_index}),不要进内存拼接 - 合并阶段用
Swoole\Coroutine\System::readFile()+Swoole\Coroutine\System::writeFile()异步操作,避开fopen/fwrite同步阻塞 - 最终文件名用
sha256($file_content . $user_id . $timestamp)生成,杜绝重复覆盖
存储层不能只依赖本地磁盘
单机磁盘扛不住多租户、多版本、高并发下载;Webman 没有内置对象存储适配,必须自己封装 SDK 调用。
Webman 2.2.0版本强化了 TCP/UDP 服务支持,优化路由组管理,并增强异步任务处理能力。结合协程与连接池技术,Webman 能轻松应对高并发场景,适用于网站、接口服务、即时通讯、物联网及游戏开发,兼具高性能、灵活扩展与稳定可靠,是多场景 PHP 服务开发的理想选择。
- MinIO 是首选:用
minio-phpSDK,配置Endpoint、AccessKey、SecretKey,Bucket 按租户分隔(如tenant-001) - 上传完成立即调用
$minio->putObject(),传入文件路径而非内容流,减少内存占用 - 下载链接必须用
$minio->presignedGetObject()生成带签名的临时 URL,有效期控制在 30 分钟内 - 禁止直接暴露
public/下的文件路径——Webman 默认不设静态文件防盗链,容易被爬取或越权访问 - 元数据(文件名、大小、类型、owner_id、parent_path)存 Redis Hash:
file:{file_id},用HSET原子写入
权限与目录树得自己建模,别信“简单挂个 Laravel Gate”
Webman 没有内置 RBAC 或 ACL,webman-admin 的权限系统只管后台菜单,不覆盖文件级操作。一个用户对 /sales/report.xlsx 的读写删权限,必须在每次请求时实时校验。
- 目录结构用 Redis Sorted Set 存:
tree:{tenant_id}:{parent_id},score 为sort_order,value 为file_id,支持快速分页列出子项 - 权限映射用 Hash:
perm:{file_id}:{user_id},字段包括r(读)、w(写)、d(删),值为1或0 - 递归权限检查要剪枝:查
/a/b/c.txt时,只沿路径查/→/a→/a/b→/a/b/c.txt四层,每层命中即停,避免全量扫描 - 共享链接需单独表:
share:{share_token},含file_id、expire_at、password_hash(可选),用EXPIRE自动清理
最易被忽略的是文件删除的原子性:删一个文件,要同步删 MinIO 对象、Redis 元数据、目录树索引、分享记录,四步缺一不可。用 Lua 脚本打包这四个操作,通过 EVAL 一次性提交,否则中间失败会导致状态不一致。










