PHPからAWS S3を操作するサンプルを書いた

PHPからAWS S3を操作するサンプルを書いた AWS

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.

AWS SKD for PHP

中段あたりにある、【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;
	}
}

 

そんなに難しいコードでもないので、参考にしてみてください。