运行 composer require league/flysystem 即可安装当前稳定版 v3.29.x,因主包会自动匹配 PHP 版本兼容的最新小版本,无需指定 ^3.0 或 v3;装错别名将报错或装错。

composer require league/flysystem 这条命令就能装上当前稳定版(v3.29.x),不需要加 ^3.0 或 v3——Packagist 上根本没这俩版本别名,硬写只会报错或装错。
为什么只运行这一条命令就够了
- Flysystem v3 的主包会自动选兼容你 PHP 版本的最新小版本:PHP 8.1+ → 装
^3.29,PHP 7.4 → 自动退到^3.20(最后一个支持 7.4 的版本) - 不要提前装适配器。核心包装完后先跑个本地读写验证通不通,再按需装对应驱动
- 如果项目里已有旧依赖(比如
aws/aws-sdk-php卡在 3.209.31),composer require会静默失败,而不是报错。这时得用composer why aws/aws-sdk-php查谁在拉冲突版本
Adapter 和 Filesystem 必须配对使用
常见错误是只 new 了适配器,却忘了传给 Filesystem 构造函数:
- ✅ 正确:
use League\Flysystem\Filesystem; use League\Flysystem\Local\LocalFilesystemAdapter; </li></ul><p>$adapter = new LocalFilesystemAdapter('/var/www/uploads'); $filesystem = new Filesystem($adapter); // 这一步不能省! $filesystem->write('test.txt', 'ok');-
❌ 错误:
$adapter = new LocalFilesystemAdapter('./uploads'); // 相对路径,Web 环境下 getcwd() 不稳定 // 没有 new Filesystem($adapter),直接调 $adapter->write(...) → TypeError 注意:
LocalFilesystemAdapter不是LocalAdapter(那是 v1),也不是Adapter(不存在)
要用什么存储,就单独装对应适配器
- 本地开发(推荐):
composer require league/flysystem-local(比原生LocalFilesystemAdapter更健壮,自带权限/符号链接处理) - AWS S3:
composer require league/flysystem-aws-s3-v3(不是flysystem-aws-s3,后者是 v2 旧版) - 阿里云 OSS:
composer require "iidestiny/flysystem-oss:^4" - GridFS(MongoDB):
composer require league/flysystem-gridfs - Google Cloud Storage:
composer require spatie/flysystem-google-cloud-storage
漏装适配器不会阻止
Filesystem实例创建,但所有write()、read()都会抛Unable to write file类错误,且无明确提示——这是最常被忽略的静默失败点。
Discussion Composer下载围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
跨存储操作不能靠 copy() 方法硬搬
$localFs->copy('a.txt', 's3://b.txt')必然失败,因为copy()只支持同实例内路径(即协议前缀必须一致)。真要跨源同步,得用
MountManager:use League\Flysystem\MountManager; <p>$manager = new MountManager([ 'local' => $localFilesystem, 's3' => $s3Filesystem, ]); $manager->copy('local://a.txt', 's3://b.txt');key 名(如
local、s3)会成为协议前缀,后续路径必须带这个前缀,否则找不到挂载点。路径必须是绝对路径,适配器初始化时传相对路径,在 CLI 下可能凑合能跑,Web 请求里因工作目录不可控,十有八九出问题。
-

















