在 symfony 5.4 中配置 flysystem 本地存储根目录应使用 oneup_flysystem-bundle,通过 %kernel.project_dir%/public/uploads 动态定义 directory,设 filepermission: 0644 和 dirpermission: 0755(八进制整数),并确保 php 进程对目标目录有写权限。

在 Symfony 5.4 中配置 Flysystem 的本地文件存储根目录,关键不是“写死路径”,而是通过参数和环境变量解耦路径定义,并确保权限与 Flysystem 行为匹配。
使用 oneup_flysystem 配置本地 adapter
推荐用 oneup_flysystem-bundle 管理配置,它兼容 Flysystem v2(Symfony 5.4 最稳组合)。在 config/packages/oneup_flysystem.yaml 中定义:
- adapter 类型选
local,不要用awss3v3或其他适配器 -
directory指向你期望的根目录,建议用%kernel.project_dir%动态解析,例如:directory: '%kernel.project_dir%/public/uploads' - 避免绝对路径硬编码(如
/var/www/html/...),否则迁移或 Docker 部署易出错
设置文件与目录权限(仅对新创建项生效)
Flysystem 的 filePermission 和 dirPermission 只影响它自己创建的文件/目录(比如 $fs->write() 或 $fs->createDirectory()),不修改已有内容:
使用 Kadence 主题作为 WordPress 项目的设计系统,涵盖设计令牌、布局系统、页头/页脚/导航设置以及页面/归档/单篇文章模板。
- 设
filePermission: 0644→ 文件可读、所有者可写 - 设
dirPermission: 0755→ 目录可浏览、所有者可读写执行 - 注意:这些值是八进制整数,不要加引号,也不要写成字符串如
"0644"
确认 PHP 进程有真实写入权限
配置再正确,若系统权限不到位,mkdir() 或 write() 仍会失败:
- 检查目标父目录(如
public/)是否对 PHP 用户(如www-data)可写:ls -ld public/,看输出中是否有w权限对应当前用户或组 - 若不可写,运行:
chown -R www-data:www-data public/uploadschmod -R 755 public/uploads - Docker 环境下,挂载卷时需显式指定 UID/GID,或用
initContainer修复权限
验证路径是否被正确解析
常见错误是路径拼接出错,尤其混用 / 和 Windows 风格反斜杠:
- 统一用正斜杠,Flysystem 不接受
\ - 路径不以
/开头(如uploads/avatar.jpg✅,不是/uploads/avatar.jpg❌) - 调试时可用
$filesystem->listContents('')查看根目录下实际有哪些项










