m2mtech / flysystem-stream-wrapper
Flysystem V2 & V3 的流包装器。
v1.4.0
2023-12-18 16:01 UTC
Requires
- php: ^7.2 || ^8.0
- league/flysystem: ^2.3|^3.0
- symfony/lock: ^5.3|^6.0|^7.0
Requires (Dev)
- ext-intl: *
- ext-pcntl: *
- ext-shmop: *
- ext-sysvmsg: *
- amphp/amp: ^2.6
- amphp/parallel: ^v1.4
- amphp/parallel-functions: ^1.0
- amphp/sync: ^1.4
- fakerphp/faker: ^1.19
- opis/closure: ^3.6
- phpstan/phpstan: ^1.10
- phpunit/php-invoker: ^2.0|^3.1|^4.0
- phpunit/phpunit: ^8.5|^9.6|^10.0
- symplify/easy-coding-standard: ^12.0
Replaces
- twistor/flysystem-stream-wrapper: v1.0.9
README
本包为 Flysystem V2 & V3 提供流包装器。
Flysystem V1
如果您正在寻找 Flysystem 1.x 的支持,请查看 twistor/flysystem-stream-wrapper。
安装
composer require m2mtech/flysystem-stream-wrapper
使用
use League\Flysystem\Filesystem; use League\Flysystem\Local\LocalFilesystemAdapter; use M2MTech\FlysystemStreamWrapper\FlysystemStreamWrapper; $filesystem = new Filesystem(new LocalFilesystemAdapter('/some/path')); FlysystemStreamWrapper::register('fly', $filesystem); file_put_contents('fly://filename.txt', $content); mkdir('fly://happy_thoughts'); FlysystemStreamWrapper::unregister('fly');
由于 Flysystem V2 不支持锁定,流包装器实现了 symfony/lock
。默认情况下,使用 /tmp
进行文件锁定,但您可以通过配置进行调整。
FlysystemStreamWrapper::register('fly', $filesystem, [ FlysystemStreamWrapper::LOCK_STORE => 'flock:///tmp', FlysystemStreamWrapper::LOCK_TTL => 300, ]);
处理可见性问题
某些适配器在处理可见性时可能会抛出异常。如果您遇到此类问题,请配置流包装器以绕过它们。
FlysystemStreamWrapper::register('fly', $filesystem, [ FlysystemStreamWrapper::IGNORE_VISIBILITY_ERRORS => true, ]);
解决目录问题(《file_exists` / 《is_dir`)
某些适配器可能不会为目录返回最后修改时间的日期。在这种情况下,您可以通过启用模拟来实现所需的行为。
FlysystemStreamWrapper::register('fly', $filesystem, [ FlysystemStreamWrapper::EMULATE_DIRECTORY_LAST_MODIFIED => true, ]);
处理《is_readable` / 《is_writable`
一些文件系统功能依赖于执行 PHP 的用户的《uid` 和 《gid`。由于没有可靠的跨平台方法来获取这些值,包装器试图估计它们。如果失败,请手动设置它们。
FlysystemStreamWrapper::register('fly', $filesystem, [ FlysystemStreamWrapper::UID => 1000, FlysystemStreamWrapper::GID => 1000, ]);
或者,直接访问《PortableVisibilityConverter
》的参数。
FlysystemStreamWrapper::register('fly', $filesystem, [ FlysystemStreamWrapper::VISIBILITY_FILE_PUBLIC => 0644, FlysystemStreamWrapper::VISIBILITY_FILE_PRIVATE => 0600, FlysystemStreamWrapper::VISIBILITY_DIRECTORY_PUBLIC => 0755, FlysystemStreamWrapper::VISIBILITY_DIRECTORY_PRIVATE => 0700, FlysystemStreamWrapper::VISIBILITY_DEFAULT_FOR_DIRECTORIES => Visibility::PRIVATE, ]);
测试
本包使用 PHP 7.4 开发,并已测试与 PHP 版本 7.2 至 8.3 的兼容性。
要测试
- 在安装了 PHP 的环境中
composer test
- 在 PHP 7.4 的 Docker 环境中
docker compose run php74 composer test
注意:从 PHP 8.1 开始使用的 PHPUnit v10 需要不同的配置文件
docker compose run php81 composer test10
更新日志
有关最近更改的信息,请参阅 CHANGELOG。
贡献
有关贡献指南,请参阅 CONTRIBUTING。
安全漏洞
如果您发现任何安全漏洞,请遵循 我们的安全策略 进行报告。
致谢
- 本包受到了 twistor/flysystem-stream-wrapper 的启发。感谢 Chris Leppanen。
- 所有贡献者
许可证
在 MIT 许可证下发布。有关更多详细信息,请参阅 许可证文件。