m2mtech/flysystem-stream-wrapper

Flysystem V2 & V3 的流包装器。

v1.4.0 2023-12-18 16:01 UTC

README

Author Software License

本包为 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

安全漏洞

如果您发现任何安全漏洞,请遵循 我们的安全策略 进行报告。

致谢

许可证

在 MIT 许可证下发布。有关更多详细信息,请参阅 许可证文件