应安装 league/flysystem v3.x 核心包及对应独立适配器(如 league/flysystem-aws-s3-driver),避免误装已废弃的 v1/v2 组件;v3 不兼容旧 api,需按新方式使用 filesystem 实例。

Composer 安装 Flysystem 不需要额外配置或魔改,直接 composer require 就行 —— 但你得选对包名,否则会装错版本或装成废弃组件。
确认要安装的是哪个 Flysystem 包
Flysystem 在 v2 和 v3 之后拆分了核心与适配器:官方主包不再是 league/flysystem(v1),而是 league/flysystem(v3)+ 独立适配器包。v2 已停止维护,v1 更是早已 EOL。
- 要使用现代 PHP(8.0+)、支持 async、插件机制、更清晰的异常体系 → 装
league/flysystem(v3.x) - 如果项目还依赖 Laravel 9 或更早版本,它自带 v3,不要重复 install,否则可能触发类冲突
- 常见误装:
league/flysystem-aws-s3-v3是 v1 时代的旧适配器,现在应换用league/flysystem-aws-s3-driver - v3 默认不带任何适配器,S3、FTP、Local 都要单独
require
执行安装命令(含常用适配器)
最简安装(仅核心):
composer require league/flysystem
加 S3 支持(推荐 AWS SDK v3.29+):
composer require league/flysystem-aws-s3-driver aws/aws-sdk-php
加本地文件系统支持(开发调试常用):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer require league/flysystem-local-driver
注意:league/flysystem v3 不再自动拉取 ext-fileinfo 检查,但某些适配器(如 S3)仍需 ext-curl 或 ext-json,缺了会报 Class not found 或 Call to undefined function 错误。
安装后立刻验证是否可用
别急着写业务逻辑,先跑个最小实例确认类能加载、驱动能注册:
<?php require 'vendor/autoload.php';
use League\Flysystem\Local\LocalFilesystemAdapter;
use League\Flysystem\Filesystem;
$adapter = new LocalFilesystemAdapter(__DIR__.'/storage');
$filesystem = new Filesystem($adapter);
$filesystem->write('test.txt', 'ok');
var_dump($filesystem->read('test.txt')); // string(2) "ok"
?>
如果报 Class 'League\Flysystem\Local\LocalFilesystemAdapter' not found,说明没装 league/flysystem-local-driver;如果报 Uncaught Error: Class "League\Flysystem\Filesystem" not found,说明核心包根本没装成功或 autoloader 损坏(可试 composer dump-autoload -o)。
常见陷阱和兼容性提醒
v3 的 API 和 v1/v2 差异很大,没有向后兼容层:
-
$filesystem->listContents()返回Iterator,不是数组,不能直接foreach ($arr as ...) - 不再有
getAdapter()方法,所有操作都通过Filesystem实例完成 - Laravel 用户注意:Laravel 10+ 内置 Flysystem v3,但
Storage::disk('s3')底层已切换为新驱动,自定义封装里若还调->getAdapter()->getClient()会失败 - 如果你在 Docker 中安装,且 base image 是
alpine,记得提前apk add php-curl,否则 S3 驱动初始化时静默失败
最易被忽略的一点:Flysystem v3 的 Filesystem 实例不是单例,也不缓存连接 —— 每次 new 都是干净实例,别想复用它来“保持连接”。连接生命周期由底层适配器自己管理。










