ThinkPHP 6 的磁盘配置写在项目根目录下的 config/filesystem.php 文件中,该文件需返回含 'disks' 键的数组,否则启动报错。

磁盘配置写在哪个文件里
ThinkPHP 6 的 filesystem.php 配置文件默认位于 config/filesystem.php,不是框架源码里那个,而是项目根目录下的 config/ 目录。如果该文件不存在,运行 php think optimize:config 或直接手动创建即可。
注意:这个文件必须返回一个数组,且键名必须是 'disks',否则 ThinkPHP 启动时会报 Undefined index: disks 错误。
本地磁盘(local)的最小可用配置
本地磁盘最常被误配的是 root 路径——它必须是绝对路径,且目录需存在、有写权限。相对路径(如 './runtime/upload')会导致 File not found 或静默失败。
-
root推荐用app()->getRuntimePath() . 'upload'动态拼接,避免硬编码 -
url不是必须项,但若要生成可访问 URL(比如上传后返回前端),得显式设为'/uploads'这类 Web 可达路径 - 别漏掉
'visibility' => 'public',否则部分驱动(如 S3)可能拒绝生成公开 URL
'local' => [
'type' => 'local',
'root' => app()->getRuntimePath() . 'upload',
'url' => '/uploads',
'visibility' => 'public',
],
阿里云 OSS 磁盘配置的关键字段
OSS 驱动依赖 overtrue/flysystem-oss,需先 composer require overtrue/flysystem-oss。配置里最容易错的是 endpoint 和 bucket:
Agent 记忆系统 — 五路融合检索 + 双时间线 + 因果链 + Spirit管家 + 记忆回声 + 弹性配置 + Circuit Breaker + GDPR合规 + 192项安全审计修复
立即学习“PHP免费学习笔记(深入)”;
-
endpoint必须带协议(https://),且不能带 bucket 名,例如https://oss-cn-hangzhou.aliyuncs.com -
bucket单独填,如'my-bucket-name',不要拼进 endpoint -
access_key和secret_key建议从环境变量读取:env('OSS_ACCESS_KEY', ''),避免泄露 - 如果 OSS 开启了「私有读写」,
visibility得设为'private',否则getTemporaryUrl()会失效
切换默认磁盘和运行时指定磁盘
全局默认磁盘由 default 配置项控制,但它只影响 think\Filesystem 门面的无参调用。实际开发中更推荐显式指定磁盘名,避免隐式依赖。
- 用门面写法:
Filesystem::disk('oss')->put('test.txt', 'hello') - 用容器解析:
app('filesystem')->disk('local')->read('readme.md') - 切记:
disk('xxx')中的xxx必须和filesystem.php里定义的键名完全一致,大小写敏感
磁盘名一旦写死在代码里,后续换存储就只能改代码——建议把磁盘名抽成配置或参数传入,尤其在多环境部署时。


















