Composerってなんなの?

ComposerはRubyのBundler、nodeJSのnpmみたいな物 PHPのLibraryって、今まではPearを使ったらりcurlで取得したり、wget..だったり 果ては、作業PCにダウンロードして転送したりとか色々面倒だったのが、Composerを使うことにより、バージョン管理、環境構築時のパッケージ共有などが用意に行える様になるものです。

色々端折ってますが

導入

rootディレクトリにcomposerをインストール

curl -s http://getcomposer.org/installer | php

とすると、composer.pharがダウンロードされます。 今後はコレを使ってパッケージ管理を行っていくことになります。

では、パッケージをインストールしてみよう!

今回は、S3への画象アップロードを行う為に必要な、AWS SDKを導入する為にComposer](http://getcomposer.org/)を使い始めましたので、それを例に進めます。

composer.pharと同階層に次のファイルを作成します。 composer.json

中に以下の内容を記述

{
     "require": {
    "aws/aws-sdk-php": "*"
     }
 }

用意が完了したら、インストールコマンドを実行

php composer.phar install

すべてが完了すると、vendorというディレクトリが出来て、その中にLibraryがインストールされているはずです。

autoload.php
aws/

折角インストールしたので、使ってみよう

<?php
require_once 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\Common\Enum\Region;
use Aws\S3\Exception\S3Exception;
use Guzzle\Http\EntityBody;


$ACCESS_KEY = 'あくせすきー';
$SECRET_ACCESS_KEY = 'シークレットキー';

    // キー、シークレットキー、リージョンを指定
    $client = S3Client::factory(array(
                'key' => self::$ACCESS_KEY,
                'secret' => self::$SECRET_ACCESS_KEY,
                'region' => Region::TOKYO));

    //フォームからアップロードされたファイル
    $tmpfile = $_FILES["fileUpload"]["tmp_name"];

    //ファイルがアップロードされていない場合は終了
    if (!is_uploaded_file($tmpfile)) {
        die('ファイルがアップロードされていません');
    }

    // バケット名
    $bucket = "バケット名";
    // アップロード先のキー(ファイル識別子)
    $key = 'test.jpg';

    try {

        $result = $client->putObject(array(
            'Bucket' => $bucket,
            'Key' => $key,
            'Body' => EntityBody::factory(fopen($tmpfile, 'r')),
        ));
    } catch (S3Exception $exc) {
       echo $exc->getMessage();
    }

これで、fileUploadという名前で送信された画像データが、S3上にアップされます!

TOKYO以外に上げるには?

vendor/aws/aws-sdk-php/src/Aws/Common/Enum/Region.php

に様々なREGIONの定数が用意されていますので、参考にして変更してみましょう。

使ってみて

comporser便利だなと思いました。 ちなみにコレ以外にも、twigとかphpunitとかもComposerで管理を始めました。 symfonyだと最初からComposerを使うんだろうけど、他のフレームワークだったので、めっちゃ便利と思えました! 普及活動していきますよ!