originphp/storage

OriginPHP 存储库

3.1.0 2021-04-13 11:57 UTC

This package is auto-updated.

Last update: 2024-09-13 20:22:57 UTC


README

license build coverage

存储库提供了从本地磁盘、ZIP存档、FTP和SFTP访问不同存储类型的简便方法。它是一个统一的方法来处理不同的存储。

安装

要安装此软件包

$ composer require originphp/storage

配置

您需要配置默认存储引擎,您可以使用多个引擎,但必须有默认的一个。

在您的引导程序/配置文件中添加

use Origin\Storage\Storage;
use Origin\Storage\Engine\LocalEngine;

Storage::config('default', [
    'className' => LocalEngine::class
    'root' => '/var/www/storage'
]);

使用存储

写入存储

use Origin\Storage\Storage;
Storage::write('test.txt','hello world!');

您也可以直接写入文件夹。树中的文件夹不存在时将自动创建。

Storage::write('my_folder/test.txt','hello world!');

从存储读取

use Origin\Storage\Storage;
$contents = Storage::read('my_folder/test.txt');

从存储删除

要删除文件或文件夹

Storage::delete('my_folder/test.txt');
Storage::delete('my_folder');

当使用删除时,文件夹将自动递归删除。

列出存储内容

版本2.0不再列出传递给列表方法的路径的相对文件名。总是返回完整的路径名。

要列出存储上的文件

use Origin\Storage\Storage;
$allFiles = Storage::list();

存储内容递归列出,并将提供给您一个FileObjects数组。每个文件都是一个对象,可以作为数组或对象访问

// Will look like this
Origin\Storage\FileObject Object
(
    [name] => bar.txt
    [directory] => folder
    [path] => folder/bar.txt
    [extension] => txt
    [timestamp] => 1601121922
    [size] => 32
)

echo $file->name;
echo $file['name'];

FileObject转换为字符串时,它将成为一个路径,例如/main/subfolder/foo.txt

如果您只想获取特定文件夹的文件,则将列出该文件夹下的所有文件。

use Origin\Storage\Storage;
$files = Storage::list('my_folder');

处理多个存储

无论您是否使用多个存储引擎,还是为单个存储引擎配置多个配置,存储实用程序都是灵活的。

您可以获取配置的存储卷

$volume = Storage::volume('sftp-backup');
$data = $volume->read('transactions.csv');

或者,您可以通过传递一个选项数组来告诉存储对象使用哪个配置

$data = Storage::read('transactions.csv',[
    'config'=>'sftp-backup'
]);

存储引擎

本地

本地存储仅与驱动器上的数据一起工作。

use Origin\Storage\Storage;
use Origin\Storage\Engine\LocalEngine;

Storage::config('default', [
    'className' => LocalEngine::class
    'root' => '/var/www/storage',
    'lock' => true // default
 ]);

FTP

然后您需要配置以下内容

use Origin\Storage\Storage;
use Origin\Storage\Engine\FtpEngine;

Storage::config('default', [
    'className' => FtpEngine::class
    'engine' => 'Ftp',
    'host' => 'example.com',
    'port' => 21,
    'username' => 'james',
    'password' => 'secret',
    'ssl' => false
 ]);

配置FTP的选项包括

  • host: 主机名或IP地址
  • port: 端口号。默认为21
  • username: ftp用户名
  • password: ftp密码
  • timeout: 默认10秒
  • passive: 默认为false
  • root: ftp账户中的存储根目录
  • ssl: 默认为false

SFTP

要使用SFTP引擎,您需要安装phpseclib

$ composer require phpseclib/phpseclib:~2.0

然后按照以下方式配置

use Origin\Storage\Storage;
use Origin\Storage\Engine\SftpEngine;

Storage::config('default', [
    'className' => SftpEngine::class
    'host' => 'example.com',
    'port' => 22,
    'username' => 'james',
    'password' => 'secret'
 ]);

如果您想使用私钥登录,您可以通过提供包含完整路径的文件名或私钥本身的内容来提供。

use Origin\Storage\Storage;
use Origin\Storage\Engine\SftpEngine;

Storage::config('default', [
    'className' => SftpEngine::class
    'host' => 'example.com',
    'port' => 22,
    'username' => 'james',
    'privateKey' => '/var/www/config/id_rsa'
]);

如果您的私钥需要密码,您也可以提供。有关更多信息,请参阅如何设置SSH密钥教程。

配置SFTP的选项包括

  • host: 主机名或IP地址
  • port: 端口号。默认为22
  • username: ssh账户用户名
  • password: ssh账户密码
  • timeout: 默认10秒
  • root: 存储根目录。例如:/home/user/sub_folder
  • privateKey: 账户的私钥或私钥可以从中加载的文件名

S3

S3引擎与Amazon S3和任何其他使用S3协议的对象存储服务器一起工作,例如minio

要使用S3引擎,您需要安装Amazon AWS SDK。

$ composer require aws/aws-sdk-php

然后您可以按照以下方式配置S3引擎

use Origin\Storage\Storage;
use Origin\Storage\Engine\S3Engine;

Storage::config('default', [
    'className' => S3Engine::class
    'credentials' => [
        'key' => env('S3_KEY'), // * required
        'secret' => env('S3_SECRET'), // * required
    ],
    'region' => 'us-east-1', // * required
    'version' => 'latest',
    'endpoint' => env('S3_ENDPOINT'), // for S3 comptabile protocols
    'bucket' => env('S3_BUCKET') // * required
 ]);

配置S3引擎的选项包括

  • 凭证:这是必需的,它是一个包含keysecret的数组
  • 区域:服务器的位置标签
  • 版本:版本设置
  • 端点:如果您不使用Amazon S3,例如 http://127.0.0.1:9000
  • 存储桶:存储桶的名称,这是必需的,且存储桶必须存在。

Minio服务器(S3)

要启动本地Minio服务器,您可以运行以下docker命令

$ docker run -p 9000:9000 minio/minio server /data

您也可以通过Web浏览器在http://127.0.0.1:9000访问它。

ZIP

要使用ZIP存储引擎,请提供带有完整路径的文件名。

use Origin\Storage\Storage;
use Origin\Storage\Engine\ZipEngine;

Storage::config('default', [
    'className' => ZipEngine::class
    'file' => '/var/www/backup.zip'
]);