ブログ

[PHP]PEAR::Services_Amazon_S3の基本的な使い方

AmazonのWEBサービスを利用するPHP開発者にとって非常に便利なPEAR::Services_Amazonですが、ここではその中のPEAR::Services_Amazon_S3を紹介します。
といってもごく基本的なことだけですが。

まずはインストールしましょう。
2010/5/20現在まだアルファ版なので(いつまでアルファ版なんだ?)、–forceオプションをつけます。
[shell]
$ pear install –force Services_Amazon_S3
[/shell]

さて、早速使ってみましょう。

アップロード

想定としては、S3上に「test」というバケットがあり、その下の「20100520」というディレクトリに「sample.txt」というファイル名でローカルファイルをアップロードします。
[php]
require_once ‘Services/Amazon/S3.php’; // ファイルの読み込みを忘れずに
require_once ‘Services/Amazon/S3/AccessControlList.php’; // ACLを指定しない場合は必要なし

$access_key = ‘xxxxxx’; // AWSのアクセスキー
$secret_key = ‘xxxxxxxxxxx’; // AWSのシークレットキー
$bucket_name = ‘test’; // S3のバケット名
$local_file_path = ’sample_file.txt’;   // アップロードするファイルのパス
$s3_file_path = ‘20100520/sample_file.txt’; // アップロード後のS3上のファイルのパス

// ファイルの中身を取得
$fpw = fopen($local_file_path, "r");
while(!feof($fp)){
$file_contents .= fgets($fp);
}
fclose($fp);

$s3 = Services_Amazon_S3::getAccount($access_key, $secret_key);
$bucket = $s3->getBucket($bucket_name);

$object = $bucket->getObject($s3_file_path);
$object->contentType = "text/plain";
// ACLを指定したい場合は次を記述
$object->acl = Services_Amazon_S3_AccessControlList::ACL_PUBLIC_READ;
$object->data = $file_contents;
$object->save();  // HTTPリクエストで送信
[/php]
簡単に言うと、

  1. Services_Amazon_S3::getAccountでインスタンスを生成して、
  2. getBucket()メソッドで特定のバケットを取得
  3. $bucket->getObject()でオブジェクトを生成して、
  4. $object->data にデータを突っ込んで
  5. $object->save()でアップロード

という感じ。

ダウンロード

上でアップロードしたファイルをダウンロードしてみましょう。
[php]
require_once ‘Services/Amazon/S3.php’;

$access_key = ‘xxxxxx’; // AWSのアクセスキー
$secret_key = ‘xxxxxxxxxxx’; // AWSのシークレットキー
$bucket_name = ‘test’; // S3のバケット名
$local_file_path = ‘download/sample_file.txt’; // 保存先(ローカル)のファイルのパス
$s3_file_path = ‘20100520/sample_file.txt’; // ダウンロードするS3上のファイルのパス

$s3 = Services_Amazon_S3::getAccount($access_key, $secret_key);
$bucket = $s3->getBucket($bucket_name);

$object = $bucket->getObject($s3_file_path);

if($object->load()){
$fp = fopen($local_file_path, "w");
if(fputs($fp, $object->data)){
echo ‘書き込み成功’;
} else {
echo ‘書き込み失敗’;
}
fclose($fp);
} else {
echo ‘ダウンロード失敗’;
}
[/php]
簡単に言うと

  1. Services_Amazon_S3::getAccountでインスタンスを生成して、
  2. getBucket()メソッドで特定のバケットを取得
  3. $bucket->getObject()でオブジェクトを生成して、
  4. load()メソッドで$object->data にデータが格納されるので
  5. $object->dataを取得

という感じ。
今回はテキストファイルを想定しているのでファイルに書き込みましたが、画像なんかだと、imagecreatefromstring($object->data)などとすればよいようです。

ちなみにバケットの下に「1」というディレクトリを作っている場合({バケット名}/1/sample.txtみたいな場合)、
アップロードは出来ますが、ダウンロードには失敗します。
これはS3foxなどを使っても同じ現象になります(invalid URLとか言われちゃう)。
一桁の数字のディレクトリ名は使っちゃダメなんでしょうか。。。

以上、PEAR::Services_Amazon_S3でファイルをアップロード、ダウンロードする方法でした。

2010年05月20日  投稿者:yano  

▲ PAGE TOP