PHPプログラマ必見!AmazonS3をPHPから操作する方法
公式サイト・ドキュメント
- AWS SDK for PHPの公式ドキュメント
http://docs.amazonwebservices.com/AWSSDKforPHP/latest/ - AWS SDK for PHPの公式Twitterアカウント
https://twitter.com/awssdkforphp - AWS SDK for PHPのリリースノート
http://aws.amazon.com/releasenotes/PHP - AmazonS3 APIドキュメント
http://docs.amazonwebservices.com/AmazonS3/latest/API/Welcome.html
※1:例えばPerlだと非公式のCPANモジュールを使うしかないのですが、Amazon::S3はもう3年間もメンテされていなくて若干悲しい思いをしました。
AWS SDK for PHPをインストールする
開発が活発に行われているので、最新版に追従できる体制にしておきましょう。ここではpearインストールをお勧めします。
Pearインストール
sudo pear channel-discover pear.amazonwebservices.com
sudo pear install aws/sdk
PHPのバージョンが古い(5.1以下)とインストールでこけますが、-fオプションを付ければ強制インストールできます。
sudo pear install -f aws/sdk
アップグレード
ライブラリの新バージョンがリリースされたら下記のようにしてアップグレードします。sudo pear channel-update pecl.php.net
sudo pear upgrade aws/sdk
AWS SDK for PHPを使うサンプルコード
下記のようにしてテキストファイルを準備してください。echo "hello" > /tmp/hello.txt
また、AWS Management Consoleにログインしてバケットを作成しておきましょう。(例:バケット名 "my-sample")
以下、アップロード、ダウンロード、オブジェクトの一覧を表示するサンプルコードです。
<?php
/**
* ライブラリを読み込んで初期化します。
*/
require_once 'AWSSDKforPHP/sdk.class.php';
$s3 = new AmazonS3(array(
'key' => 'AWSアクセスキーIDを書く',
'secret' => 'AWSシークレットキーを書く',
));
$bucket = "my-samle";
// オブジェクト(ファイル)をアップロードします。
$response = $s3->create_object($bucket, "foo/test.txt", array(
"fileUpload" => "/tmp/hello.txt",
"acl" => AmazonS3::ACL_PRIVATE,
"contentType" => "text/plain"
));
if ($response->isOK()) {
echo "OK\n";
} else {
echo "NG\n";
}
// 同じファイルを別名でアップロードします。
$response = $s3->create_object($bucket, "foo/日本語.txt", array(
"fileUpload" => "/tmp/hello.txt",
"acl" => AmazonS3::ACL_PRIVATE,
"contentType" => "text/plain"
));
if ($response->isOK()) {
echo "OK\n";
} else {
echo "NG\n";
}
//S3上のオブジェクトをローカルにダウンロード
$response = $s3->get_object($bucket, 'foo/test.txt', array(
'fileDownload' => '/tmp/downloaded.txt'
));
if ($response->isOK()) {
echo "OK\n";
} else {
echo "NG\n";
}
//S3上のオブジェクトを取得して変数に保持
$response = $s3->get_object($bucket, 'foo/日本語.txt', array(
));
if ($response->isOK()) {
echo "OK\n";
} else {
echo "NG\n";
}
//オブジェクトの中身を表示
echo "====body====\n" . $response->body. "============\n";
//アップ済みオブジェクトのリストを取得
$response = $s3->list_objects($bucket,array(
'prefix' => 'foo/',
));
$objects = $response->body->Contents;
// $objectsはCFSimpleXMLクラスのインスタンス。
// Compositeパターンになっている。
assert($objects instanceof CFSimpleXML);
foreach ($objects as $obj) {
assert($obj instanceof CFSimpleXML);
var_dump($obj);
}
実行結果
OK
OK
OK
OK
====body====
hello
============
object(CFSimpleXML)#9 (6) {
["Key"]=>
string(12) "foo/test.txt"
["LastModified"]=>
string(24) "2012-09-05T18:02:11.000Z"
["ETag"]=>
string(34) ""b1946ac92492d23xxxxxxx2611184""
["Size"]=>
string(1) "6"
["Owner"]=>
object(CFSimpleXML)#10 (2) {
["ID"]=>
string(64) "hogefuga76f79601cdcb9aa98f3925507cf2ac4f9930c4"
["DisplayName"]=>
string(8) "dqneo"
}
["StorageClass"]=>
string(8) "STANDARD"
}
object(CFSimpleXML)#11 (6) {
["Key"]=>
string(17) "foo/日本語.txt"
["LastModified"]=>
string(24) "2012-09-05T18:02:11.000Z"
["ETag"]=>
string(34) ""b1946ac92492d234xxxxxxxx611184""
["Size"]=>
string(1) "6"
["Owner"]=>
object(CFSimpleXML)#9 (2) {
["ID"]=>
string(64) "hogefuga76f79601cdcb9aa98f3925507cf2ac4f9930c4565b4b6d2"
["DisplayName"]=>
string(8) "dqneo"
}
["StorageClass"]=>
string(8) "STANDARD"
}
をを、かんたん!!こんな感じで非常に手軽にファイルをアップロード&ダウンロードすることができます。
ぜひ一度使ってみてください。