unntech/minio-php-s3

minio SDK for PHP - use Amazon Web Services sdk

v1.0.1 2025-06-19 10:47 UTC

This package is auto-updated.

Last update: 2025-06-19 10:51:23 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version PHP Version Require

  • 依据 Amazon S3 SDK aws/aws-sdk-php:3.293.2
  • 只复制关于S3sts模块代码,精减没有使用的模块代码,解决项目下载大量没用到的代码,文件提交量大等问题
  • 只修改命名空间 AwsMinioS3, 解决与原命名空间冲突问题

开发文档

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