読者です 読者をやめる 読者になる 読者になる

fuelphpからs3(aws)を利用する方法メモ

fuelphp php aws

はじめに

やりたかったことは、ec2上で構築したwebサーバーからプログラムでs3へ保存、削除したかったことです。

AWSのS3を使う手順 - とりあえずphpとか
こちらでs3を使う手順をまとめましたが、その際にs3fsを使ってec2にs3をマウントしたのですが実際にプログラムで利用する際はそういうことではなかったかも、、、

今回はawssdkを使ってphpで実装したのでその手順をメモします

sdkの入手

http://aws.amazon.com/jp/sdk-for-php/
こちらのページにダウンロード「AWS SDK for PHP」というボタンがあり、そこからgithubへ遷移できるのでそこからzip形式の一式取得可能です。

ダウンロードしたファイルを解凍して、そのままfuel/app/vendor以下へ移動します。
>例
fuel/app/vendor/aws

awsのアクセスキーIDとシークレットアクセスキーを確認(または作成)

1. awsの管理画面右上の「AWSにようこそ」のプルダウンを開き、「認証情報」を開く
2. セキュリティ認証情報ページが表示されるので、そこの「アクセスキー(アクセスキー ID とシークレットアクセスキー)」より確認(または作成)

なんか、見え方また変わったような変わってないような、、、シークレットアクセスキーは作った時にしか見えないので過去に作って無くした場合は再度作成すればOK

sdkを使う

ファイルをs3に保存するスクリプトは以下の形になります。

<?php
require(APPPATH.'vendor/aws/aws-autoloader.php');

use Aws\S3\S3Client;
use Aws\Common\Enum\Region;
use Aws\S3\Exception\S3Exception;
use Guzzle\Http\EntityBody;

class Controller_Upload extends Controller_App
{
    public function action_index()
    {
        try {
 
            // アクセスキーIDとシークレットアクセスキー
            $key = "*****";
            $secret = "*****";

            // s3のリージョン(今回は東京の場合)
            $region = Region::TOKYO;

            // バケット名
            $bucket = "example.com";

            // 保存ファイル
            $input_file_path = "path/to/input_file";

            // 保存先
            $output_file_path = "path/to/output_file";

            $s3 = S3Client::factory(array(
                "key" => $key,
                "secret" => $secret,
                "region" => $region,
            ));

            $s3->putObject(array(
                "Bucket" =>$bucket,
                "Key" => $output_file_path,
                "Body" => file_get_contents($input_file_path),
            ));

            // 成功

        } catch(Exception $e) {
            // 失敗
        }

    }
}

ついでに削除する場合は、上記のアップロードしてる部分が、以下のようになります。

    $file_path = "path/to/file";

    $s3->deleteObjects(array(
        'Bucket' => $output_file_path,
        'Objects' => array(
            array('Key' => $file_path)
        )
    ));

以上です