unntech / minio-php-s3
minio SDK for PHP - use Amazon Web Services sdk
v1.0.1
2025-06-19 10:47 UTC
Requires
- php: >=7.2.5
- ext-json: *
- guzzlehttp/guzzle: ^6.5.8 || ^7.4.5
- mtdowling/jmespath.php: ^2.6
This package is auto-updated.
Last update: 2025-06-19 10:51:23 UTC
README
- 依据 Amazon S3 SDK aws/aws-sdk-php:3.293.2
- 只复制关于
S3
和sts
模块代码,精减没有使用的模块代码,解决项目下载大量没用到的代码,文件提交量大等问题 - 只修改命名空间
Aws
为MinioS3
, 解决与原命名空间冲突问题
开发文档
https://aws.amazon.com/cn/sdk-for-php/
https://docs.aws.amazon.com/zh_cn/sdk-for-php/v3/developer-guide/credentials.html
安装
composer require unntech/minio-php-s3
参与开发
- 直接提交PR或者Issue即可
- 期望 Amazon 和 minio 可以直接出 PHP 的 minio SDK,方便PHP用户群体使用
使用示例
获取STS临时凭证
use MinioS3\Sts\StsClient; $stsClient = new StsClient([ 'credentials' => [ 'key' => 'key', 'secret' => 'secret' ], 'region' => 'cn-default-1', 'version' => 'latest', 'bucket_endpoint' => false, 'use_path_style_endpoint' => true, 'endpoint' => 'http://127.0.0.1:9801' ]); $assumeRoleResult = $stsClient->assumeRole([ 'RoleArn' => 'arn:ssssxxx:xxx:xxx:xxxx', 'RoleSessionName' => 'role-session-name' ]); $res = $stsClient->createCredentials($assumeRoleResult); $sts = $res->toArray(); var_dump($sts);
操作 S3 示例
use MinioS3\S3\PostObjectV4; use MinioS3\S3\S3Client; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'cn-default-1', 'endpoint' => 'http://127.0.0.1:9801', 'bucket_endpoint' => false, 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => 'key', 'secret' => 'secret', //'token' => $sts['token'], ], ]); // 列出所有对象 $res = $s3->listObjectsV2([ 'Bucket' => 'pub' ]); //var_dump($res); // 复制对象 $result = $s3->copyObject([ 'Bucket' => 'pub', 'CopySource' => '/pub/a.txt', 'Key' => 'b.txt', ]); var_dump($result); //删除对象 $res = $s3->deleteObject([ 'Bucket' => 'pub', 'Key' => 'b.txt' ]); var_dump($res); // 上传对象 $insert = $s3->putObject([ 'Bucket' => 'pub', 'Key' => 'c.txt', // 'SourceFile' => $sourceFileName, // 使用文件上传 'Body' => 'Hello from MinIO!! exm', // 文件内容 'ContentType' => 'text/plain' ]); var_dump($insert); var_dump($insert['ObjectURL']); // 下载文件的内容 $retrive = $s3->getObject([ 'Bucket' => 'pub', 'Key' => 'a.txt', 'SaveAs' => './a.txt' ]); var_dump($retrive); //获得一个10分钟有效期的pre-signed URL $command = $s3->getCommand('GetObject', [ 'Bucket' => 'pub', 'Key' => 'a.txt', ]); $signedRequest = $s3->createPresignedRequest($command, "+600 seconds"); var_dump((string)$signedRequest->getUri()); // 获取一个临时上传地址,交前端上传文件 $options = [ ['acl' => 'public-read'], ['bucket' => 'pub'], ['key' => 'p.txt'], ]; $formInputs = ['acl' => 'public-read', 'key' => 'p.txt']; $postObject = new PostObjectV4( $s3, 'pub', $formInputs, $options, '+2 hours' ); $data = [ 'endpoint'=>$postObject->getFormAttributes(), 'form'=>$postObject->getFormInputs(), ]; var_dump($data);
S3 分片上传
use MinioS3\Exception\MultipartUploadException; use MinioS3\S3\MultipartUploader; // Use multipart upload 分段上传 $source = './a.zip'; $uploader = new MultipartUploader($s3, $source, [ 'bucket' => 'pub', 'key' => 'a1.zip', ]); try { $result = $uploader->upload(); echo "Upload complete: {$result['ObjectURL']}\n"; } catch (MultipartUploadException $e) { echo $e->getMessage() . "\n"; }
版权信息
Apache License 2.0 https://github.com/aws/aws-sdk-php/blob/master/LICENSE