blogですかい

仕事、プライベートで学んだことなどを発信し、その内容がたとえ少数でも誰かの役に立ったらなら、それはとっても嬉しいなって

AWS S3とPHP SDKについて

S3について

言わずと知れたファイルホスティングサービス
一つのAWSアカウントで、複数のbucketを作ることができる

bucket

ファイルの入れ物
bucket毎にリージョンが指定可能
1つのbucketに複数のファイルを格納できる

AWS-SDK for PHP

PHPからAWSの各種サービスを操作するためのSDK
http://aws.amazon.com/jp/sdkforphp/

AWSのPHP-SDK、S3クラスでよく使うであろうメソッドの使い方

create_bucket($bucket, $region, $acl = self::ACL_PRIVATE, $opt = null)

$regionで指定するリージョンに$bucketという名前のbucketを作成する。
$bucketは任意の文字列(小文字英数及び-) $region,$aclにはconstで宣言されている定数を指定する。
$aclパーミッションが設定できる。(デフォルトのACL_PRIVATEはオーナーのみ読み書き可)
$optは内部で$this->authenticate()に渡される。

//例 backetをTOKYOリージョンに作成
$s3 = new AmazonS3();
$bucket = 'backet-name-must-be-unique';
$create_bucket_response = $s3->create_bucket($bucket, AmazonS3::REGION_TOKYO);
if($create_bucket_response->isOK()){
  //$bucketという名前のbucketが作成できたときの処理
}else{
  //bucketの作成に失敗したときの処理
}

create_object($bucket, $filename, $opt = null)

$bucketに$filenameというオブジェクトを格納する。
$bucketには存在するbucketの名前を、$filenameにはS3上でのファイル名を指定する。
$optにはオブジェクトのパーミッションやアップロードするファイルのパス/URLなどを指定する。
ローカルディスク上のファイルをアップロードするには$optに array('fileUpload'=>'ローカルディスク上のファイルパス') を指定する

//例 pict01.jpg、pict02.jpgをアップロードする
//pict01.jpgをACL_PRIVATEでアップロード
$s3->batch()->create_object($bucket,'pict01.jpg',
                            array('fileUpload'=>'/path/to/pict01.jpg',
                                  'acl'=>AmazonS3::ACL_PRIVATE
                                  ));
//aclを省略した場合は、bucketのアクセス権が適用される
$s3->batch()->create_object($bucket,'pict02.jpg',
                            array('fileUpload'=>'/path/to/pict02.jpg'
                                  ));
$file_upload_response = $s3->batch()->send();
if($file_upload_response->areOK()){
  //アップロード成功
}else{
  //アップロード失敗
}

batch()及びsend()は親クラスのメソッドで、複数の処理をキューに貯め、send()呼び出し時にまとめて処理することができる。

get_object_url($bucket, $filename, $preauth = 0, $opt = null)

$bucket内の$filenameオブジェクトにWebアクセスするためのURLを返す。
パーミッションがPRIVATEになっているファイルには$preauthでWebアクセス可能な時間制限を設定する。
$preauthにはUNIXタイムスタンプの他に、strtotimeの引数と同様の文字列を指定できる。

//例 設定後10分間ダウンロード可能なURLを発行する
$url = $s3->get_object_url($bucket, $filename, '10 minutes');

他にもたくさんありますが、今回はこのくらいで、、、