PHP: AWS SDK for PHP v2 で S3 にファイルをアップロード
S3 の指定バケットにファイルをアップロードしたい、そんなときは AWS SDK を利用しましょう。
今回の例では PHP 版の SDK を利用します。
Composer をインストールします。
~$ curl -sS https://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /path/to/aws-sdk-php/composer.phar
Use it: php composer.phar
composer.json
に以下の json を記述して、AWS SDK for PHP をインストールする準備をします。
{
"require": {
"aws/aws-sdk-php": "2.*"
}
}
AWS SDK for PHP をインストールします。
~$ php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing symfony/event-dispatcher (v2.5.5)
Downloading: 100%
- Installing guzzle/guzzle (v3.9.2)
Downloading: 100%
- Installing aws/aws-sdk-php (2.7.0)
Downloading: 100%
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/event-dispatcher suggests installing symfony/http-kernel ()
aws/aws-sdk-php suggests installing doctrine/cache (Adds support for caching of credentials and responses)
aws/aws-sdk-php suggests installing monolog/monolog (Adds support for logging HTTP requests and responses)
aws/aws-sdk-php suggests installing symfony/yaml (Eases the ability to write manifests for creating jobs in AWS Import/Export)
Writing lock file
Generating autoload files
AWS SDK for PHP を使って、特定のファイルを S3 にアップロードします。
// config.php
<?php return [
'includes' => ['_aws'],
'services' => [
'default_settings' => [
'params' => [
'key' => 'YOUR_AWS_ACCESS_KEY_ID',
'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY',
// OR: 'profile' => 'my_profile',
'region' => 'us-west-2'
]
]
]
);
// putObject.php
<?php require_once 'vendor/autoload.php';
$bucketName = 'hoge-fuga-bucket';
$pathToFile = '/path/to/*******.jpg';
use Aws\S3\S3Client;
use Aws\Common\Aws;
$aws = Aws::factory(sprintf('%s/config.php', dirname(__FILE__)));
$client = $aws->get('s3');
$filename = basename($pathToFile);
printf("File basename: %s\n", $filename);
$key = sprintf('xxxxx/%s', $filename);
$putResult = $client->putObject([
'Bucket' => $bucketName,
'Key' => $key,
'SourceFile' => $pathToFile,
'Metadata' => [
'Foo' => 'abc',
'Baz' => '123'
],
]);
$client->waitUntil('ObjectExists', [
'Bucket' => $bucketName,
'Key' => $key
]);
※ Getting Started Guide — AWS SDK for PHP 2.7.5 documentation が参考になります
これで S3 の管理画面からバケット「hoge-fuga-bucket」を選択し、ディレクトリ「xxxxx」以下に ***.jpg が存在し、更に中身がアップロードしたものと同じものであれば OK です。
※ バケット名は S3 上でユニークであるため、サンプルとは変更して試してください。