phossa2/storage

适用于本地或远程存储系统的存储前端

2.0.1 2016-08-23 01:31 UTC

This package is not auto-updated.

Last update: 2024-09-15 01:32:26 UTC


README

Build Status Code Quality Code Climate PHP 7 ready HHVM Latest Stable Version License

phossa2/storage 是一个支持本地或云存储的 PHP 存储库。

它需要 PHP 5.4,支持 PHP 7.0+ 和 HHVM。它符合 PSR-1PSR-2PSR-3PSR-4 以及提议的 PSR-5

安装

使用 composer 工具安装。

composer require "phossa2/storage"

或者在您的 composer.json 中添加以下行

{
    "require": {
       "phossa2/storage": "2.*"
    }
}

简介

  • 简单的、类似 RESTful 的 API。

  • 统一路径语法,如 /local/img/avatar.jpg 适用于所有系统。

  • 挂载和卸载 filesystem

  • 支持不同的 drivers

  • 支持 stream

使用方法

创建存储实例

use Phossa2\Storage\Storage;
use Phossa2\Storage\Filesystem;
use Phossa2\Storage\Driver\LocalDriver;

// mount local dir '/www/storage' to '/local'
$storage = new Storage(
    '/local',
    new Filesystem('/www/storage')
);

// add a file
$filename = '/local/newfile.txt';
$storage->put($filename, 'this is the content');

// check existens
if ($storage->has($filename)) {
    // read file content
    $str = $storage->get($filename);

    // delete the file
    $storage->del($filename);
}

// mount another filesystem
$storage->mount('/aws', new Filesystem(new AwsDriver()));

功能

  • RESTful API

    支持简单的、直观的 API,如 get()put()has()del() 等。

    其他 API 如

    • meta()

      获取文件的元数据

      // get the meta data
      if ($storage->has($file)) {
          $meta = $storage->meta($file);
      }
      
      // update meta data
      $new = ['mtime' => time()];
      $storage->put($file, null, $new);
    • copy()move()

      在文件系统中复制或移动文件

      // move to another name
      $storage->move('/local/README.txt', '/local/README.bak.txt');
      
      // copy into another filesystem's directory
      $storage->copy('/local/README.txt', '/aws/www/');
  • 统一路径语法

    使用统一路径语法,如 `/local/dir/file.txt`,适用于包括 Windows 在内的所有系统。底层驱动负责透明地转换路径。

    $storage = new Storage(
      '/disk/d',
      new Filesystem(new LocalDriver('D:\\\\'))
    );
    
    $storage->put('/disk/d/temp/newfile.txt', 'this is content');
  • 挂载和卸载文件系统

    filesystem 是不同驱动程序的包装,具有权限。用户可以如下挂载只读文件系统:

    // mount as readonly, default is Filesystem::PERM_ALL
    $storage->mount(
        '/readonly',
        new Filesystem(
          '/home/www/public',
          Filesystem::PERM_READ
        )
    );
    
    // will fail
    $storage->put('/readonly/newfile.txt', 'this is the content');

    不同的文件系统可能使用相同的驱动程序

    $driver = new LocalDriver('/home/www/public');
    
    // writable
    $storage->mount('/public', new Filesystem($driver));
    
    // readonly
    $storage->mount('/readonly', new Filesystem($driver, Filesystem::PERM_READ));

    文件系统可能相互重叠

    // mount root
    $storage->mount('/', new Filesystem(...));
    
    // mount var
    $storage->mount('/var', new Filesystem(...));
    
    // mount cache
    $storage->mount('/var/cache', new Filesystem(...));
  • 驱动程序

    支持不同驱动程序,包括本地或云存储。

  • 如下写入和读取流:

    // read stream
    $stream = $storage->get('/local/thefile.txt', true);
    
    // write with stream
    $storage->put('/local/anotherfile.txt', $stream);
    
    // close it
    if (is_resource($stream)) {
        fclose($stream);
    }

API

  • \Phossa2\Storage\Storage

    • bool has(string $path)

      检查 $path 是否存在。

    • null|string|array|resource get(string $path, bool $getAsStream)

      获取 $path 的内容。

      • 如果未找到或失败,则返回 NULL

      • 如果 $path 是目录,则返回此 $path 下文件的完整路径数组。

      • 如果 $getAsStreamtrue,则返回流处理器。

    • bool put(string $path, string|resource|null $content, array $meta = [])

      设置 $path 的内容或元数据。

    • bool del(string $path)

      删除 $path。如果 $path 是目录,则删除此路径下的所有文件以及该路径本身(除非它是挂载点)。

    • bool copy(string $from, string $to)bool copy(string $from, string $to)

      复制或移动 $from$to

    • array meta(string $path)

      获取 $path 的元数据。如果未找到或错误,则返回 []

    • Phossa2\Storage\Path path(string $path)

      返回一个 Phossa2\Storage\Path 对象

  • 错误相关

    • bool hasError()

      是否有错误?

    • string getError()

      获取之前的错误信息。如果没有错误,则返回 ''

      if (!$storage->copy('/local/from.txt', '/local/to.txt')) {
          $err = $storage->getError();
      }
    • string getErrorCode()

      获取错误代码的数字字符串。

变更日志

请参阅变更日志获取更多信息。

贡献

请参阅贡献指南获取更多信息。

依赖关系

  • PHP >= 5.4.0

  • phossa2/shared >= 2.0.23

许可证

MIT许可证