AWSのS3に対して、PHPから操作するサンプルを書きました。アップロード、削除、表示ができるモジュールになっています。AWS SDK for PHPを使って実装しています。
■aws.pharをダウンロード
AWS SDK for PHPをダウンロードします。まず、以下のURLにアクセスします。
Install the AWS SDK for PHP Version 3 - AWS SDK for PHP
Install the AWS SDK for PHP Version 3.
中段あたりにある、【Installing via Phar】項目の【download the packaged phar】からaws.pharをダウンロードします。このaws.pharを利用するプログラム上でrequireなどで読み込むと利用することができます。
■サンプルコード
このサンプルコードを読み込んで、S3Moduleクラスをインスタンス化したあと、各種メソッドを呼び出すとS3に対して操作が可能になります。uploadメソッドでアップロード、deleteで削除、dispで表示を行うことができます。バケット名、AWSのキー、AWSのシークレットキーはそれぞれ変更してください。
<?php
require_once('aws.phar');
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
use Guzzle\Http\EntityBody;
/**
* S3を操作するモジュールサンプル
* upload アップロードします。
* delete 削除します。
* read S3から情報を読み込みます。
*/
class S3Module {
// バケット名
private $bucketName = "バケット名";
// AWSのキー名
private $keyId = "AWSのキー";
// シークレットキー
private $secretKey = "AWSのシークレットキー";
// region 東京region指定
private $region = 'ap-northeast-1';
/**
* アップロードメソッド
* $localFilePathにローカルのパスを指定するとそのファイルをアップロードします。
* 空の場合、ファイルが存在しない時は例外が発生します。
* $uploadFileNameにはアップロード後のファイル名を指定します。
*/
public function upload($localFilePath, $uploadFileName) {
// パスのチェック ファイルパスが空ではないか?
if (empty($localFilePath)) {
throw new Exception('ファイルアップロード::パスが見つかりません。');
}
// パスのチェック ファイルが存在するか
if (!file_exists($localFilePath)) {
throw new Exception('ファイルアップロード::ファイルが存在しません。');
}
if (empty($uploadFileName)) {
throw new Exception('アップロードロード::アップロードファイル名が指定されていません。');
}
// ファイルのMIMEを判定する
$mimeType = mime_content_type($localFilePath);
// s3オブジェクト生成
$s3Object = $this->getS3ClientInstance($this->keyId, $this->secretKey, $this->region);
// アップロードする。例外が発生するとS3Exceptionがthrowされます。
$uploadInfo = [
'Bucket' => $this->bucketName,
'Key' => $uploadFileName,
'SourceFile' => $localFilePath,
'ContentType' => $mimeType,
];
// ファイルを置く。
$result = $s3Object->putObject($uploadInfo);
return $result;
}
/**
* 指定したS3上のファイル名のオブジェクトを削除します。
*/
public function delete($s3FileName) {
// パスのチェック ファイルパスが空ではないか?
if (empty($s3FileName)) {
throw new Exception('ファイル削除::S3ファイル名が見つかりません。');
}
// s3オブジェクト生成
$s3Object = $this->getS3ClientInstance($this->keyId, $this->secretKey, $this->region);
// 削除する。例外が発生するとS3Exceptionがthrowされます。
$deleteInfo = [
'Bucket' => $this->bucketName,
'Key' => $s3FileName,
];
// ファイルを置く。
$result = $s3Object->deleteObject($deleteInfo);
return $result;
}
/**
* S3からデータを取得します。
* 引数にはファイル名を設定してください。
* ※ IOSなど携帯電話端末から取得はこのメソッドを使わないでください。管理画面用のメソッドです。
*/
public function read($s3FileName) {
// パスのチェック ファイルパスが空ではないか?
if (empty($s3FileName)) {
throw new Exception('ファイル削除::S3ファイル名が見つかりません。');
}
// s3オブジェクト生成
$s3Object = $this->getS3ClientInstance($this->keyId, $this->secretKey, $this->region);
// 削除する。例外が発生するとS3Exceptionがthrowされます。
$dispInfo = [
'Bucket' => $this->bucketName,
'Key' => $s3FileName,
];
// ファイルを置く。
$result = $s3Object->getObject($dispInfo);
return $result;
}
/**
* インスタンスを取得する。
* 引数にAWSのキーとシークレットキーを指定する。
* regionは使っているリージョンを設定する。
*/
private function getS3ClientInstance($keyId, $secretKey, $region, $sdkVersion = 'latest') {
// 設定配列を作っています。S3オブジェクト生成用のオプションです。
$s3Setting = [
'credentials' => [
'key' => $keyId,
'secret' => $secretKey,
],
'region' => $region,
'version' => $sdkVersion,
];
// オブジェクト生成して戻す。もし、設定が間違っていたら例外がでます。
$s3Object = S3Client::factory($s3Setting);
return $s3Object;
}
}
そんなに難しいコードでもないので、参考にしてみてください。