99designs/cabinet

此包已被放弃且不再维护。未建议替代包。

PHP的文件存储抽象

1.0.0 2013-08-26 10:14 UTC

This package is not auto-updated.

Last update: 2022-11-21 06:21:35 UTC


README

Cabinet 是一个用 PHP 编写的文件存储抽象。文件存储将字符串键映射到文件。

Cabinet 的核心是 FileStore 接口,它定义了大多数您在普通文件系统中会找到的操作(读取、写入、删除等)。通过针对此接口进行编程,您的应用程序代码保持对底层文件存储实现的未知。

抽象文件存储允许您在不修改应用程序代码的情况下交换一种实现方式。例如,您可能在生产中使用 S3,在开发中使用本地文件系统,在单元测试中使用基于数组的实现。

文件存储实现

Cabinet 提供了多种文件存储实现

  • FilesystemFileStore 将文件存储在您的本地文件系统中。
  • ArrayFileStore 将文件存储在 PHP 数组中。
  • NullFileStore 是一个类似 /dev/null 的黑洞。

还有两个额外的包装实现

  • ReadOnlyFileStore 将读写操作委派给两个不同的文件存储。
  • MountPointFileStore 提供了一种将多个文件存储组合成虚拟文件系统的方式。

要提供自定义实现,编写一个实现 Cabinet\FileStore 的类。

示例用法

通常会将文件存储的构造推迟到工厂构造函数中

class FileStoreFactory
{
    public static function create() {
        // This might return an implementation based on your app config
        return new \Cabinet\FilesystemFileStore('/tmp/myfiles');
    }
}

然后您的应用程序代码可以这样使用文件存储

$store = FileStoreFactory::create();
$file = $store->newFile('/foo/bar');
$store->setFileContents($file, 'some data');
$store->close($file);

这会将给定数据写入 /tmp/myfiles/foo/bar