aws-sdk-phpでIDCFとMinioのオブジェクトストレージに投稿する設定
AWS
<?php $s3 = Aws\S3\S3Client::factory(array( 'credentials' => [ 'key' => '', 'secret' => '', ], 'region' => 'ap-northeast-1', 'version' => '2006-03-01', //latestでもいい )); $result = $s3->putObject(array( 'Bucket' => 'bucket-test', 'Key' => 'key', 'Body' => 'body', 'ACL' => 'public-read', //'ContentType' => 'image/jpeg', )); echo $result['ObjectURL'];
Minio
<?php $s3 = Aws\S3\S3Client::factory(array( 'credentials' => [ 'key' => '', 'secret' => '', ], 'region' => '', //値はなくても構わないがkeyは必要 'version' => '2006-03-01', //latestでもいい 'endpoint' => 'http://127.0.0.1:9000', //minioのipでhttpから記述する必要がある 'use_path_style_endpoint' => true, )); $result = $s3->putObject(array( 'Bucket' => 'bucket-test', 'Key' => 'key', 'Body' => 'body', 'ACL' => 'public-read', //'ContentType' => 'image/jpeg', )); echo $result['ObjectURL'];
IDCF
aws-sdk-phpの2.x系で動作確認済み
※3.x系はsignatureの関係なのか動かない・・・
<?php $s3 = Aws\S3\S3Client::factory(array( 'credentials' => [ 'key' => '', 'secret' => '', ], 'endpoint' => 'http://ds.jp-east.idcfcloud.com', 'signature' => 's3', //IDCFはsignatureV4に対応していないのでsignatureV2にする必要がありs3でsignatureV2の指定になる )); $result = $s3->putObject(array( 'Bucket' => 'bucket-test', 'Key' => 'key', 'Body' => 'body', 'ACL' => 'public-read', //'ContentType' => 'image/jpeg', )); echo $result['ObjectURL'];
s3はバケットURLが複数ある
例:bucket-testをバケット名とした場合
https://s3-ap-northeast-1.amazonaws.com/bucket-test/
https://bucket-test.s3-ap-northeast-1.amazonaws.com/
aws-sdk-php3.x系だとバケット名サブドメインでリクエストが投げられるのでMinioなどipで指定したい場合は'use_path_style_endpoint' => true,を指定してバケット名パスを有効にする必要がある
IDCFもAWSと同じ両方のURLパターンに対応しているがsignatureはまだ完全に対応しきれていないっぽい?