originphp / storage
OriginPHP 存储库
Requires
- php: >=7.3.0
- ext-zip: *
- originphp/configurable: ^2.0
- originphp/defer: ^3.0
Requires (Dev)
- aws/aws-sdk-php: ^3.1
- phpseclib/phpseclib: ~2.0
- phpstan/phpstan: ^0.12.64
- phpunit/phpunit: ^9.2
Suggests
- aws/aws-sdk-php: Install this to use the S3 Engine
- phpseclib/phpseclib: Install this to use the SFTP Engine
README
存储库提供了从本地磁盘、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
引擎的选项包括
- 凭证:这是必需的,它是一个包含
key
和secret
的数组 - 区域:服务器的位置标签
- 版本:版本设置
- 端点:如果您不使用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' ]);