[PHP] AWS S3にファイルをアップロードする

AWS S3にファイルをアップロードするには以下の方法で行うことができる

目次

Composerをインストールする

 

curl -sS https://getcomposer.org/installer | php

 

 

AWS SDK for PHPのインストール

プログラムを実行したいフォルダまで移動し、AWS SDK for PHPのインストールする

 

cd /var/www/htdocs
php composer.phar require aws/aws-sdk-php

 

インストールが成功すると、vendorというフォルダが作成され、その中にawsというフォルダが作成されている

IAMでユーザの作成と権限の付与

AWS console→IAMを開き、S3バケットにファイルをアップロードできる権限を持ったユーザを作成するので、IAM→ユーザ→作成を選択

今回に適した既存のポリシーが無いので「ポリシーの作成」をクリック

新しいウィンドウが開くので、サービスを「S3」を選択、アクションは「リスト」「読み込み」「書き込み」にチェックする。ファイルの読み込みとリストは必要なければチェックしなくとも良い

できれば対象バケット以外へのバケットへの操作はさせたくないので、今回ファイルをアップロードしたいバケット名を指定して、制限をかける

リソース欄をクリックして、bucket欄のARNの追加をクリック

バケット名を入力するとARN名にしてくれる

ポリシーの確認をクリックして、ポリシーの名前と説明を入力

ポリシーの内容に問題なければ、ポリシーの作成をクリック

IAMユーザのウィンドウに戻り、先程作成したポリシーをアタッチして、次に進む

タグは必要があれば追加

ユーザの作成の確認をして作成ボタンをクリック

ユーザが作成されると「アクセスキー」と「シークレットーキー」が生成されるので、両方ともメモする。この2つはこの時のみ表示されるので注意

これでAWSコンソールでの作業は完了

 

 

後はphpコードを以下のように書き、vendorフォルダと同じ場所に配置すればOK

バケット名、リージョン名、アクセスキー、シークレットキーは適宜変更すること

 

 

//S3にアップロードする準備
require_once "vendor/autoload.php";
use Aws\S3\S3Client;
$bucket = 'バケットの名前';
$key = 'アクセスキー';
$secret= 'シークレットキー';

// S3クライアントを作成
$s3 = new S3Client(array(
'version' => 'latest',
'credentials' => array(
'key' => $key,
'secret' => $secret,
),
'region' => 'リージョン名', // アジアリージョン
));

$folderName= 'tmp';

func_uploadFileToS3($s3, $bucket, $folderName, $filePath);

 

//アップロード関数
function func_uploadFileToS3($s3, $bucket, $folderName,$filePath){

$fileName = basename($filePath);

// S3バケットにファイルをアップロード
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $folderName.'/'.$fileName,
'Body' => fopen($filePath, 'rb'),
'ACL' => 'public-read', // 一般公開
'ContentType' => mime_content_type($filePath),
));

}

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です