はじめに
PHPでAmazon S3に画像アップロードと、アップロードした画像を一覧表示するサンプルプログラムを書いてみました。
3つの画面を使ってサンプルを紹介します。
・ファイルアップロード画面
・S3バケットに画像をアップロードする画面
・S3バケットの画像を一覧表示する画面
環境
PHP 7.2.10
AWS SDK for PHP 3.33.4 (Composerでインストール)
※ 前提としてS3のバケットと、S3にアップロードできるユーザー(IAM)は作成済みとします。
ファイルアップロード画面
ファイルを選択してアップロードする画面です。
upload.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Upload</title>
</head>
<body>
<form enctype="multipart/form-data" action="s3.php" method="POST">
<input type="file" name="file">
<input type="submit">
</form>
</body>
</html>
S3バケットに画像をアップロードする画面
ファイルアップロード画面でアップロードされた画像をS3バケットにアップロードします。
s3.php
<?php
require_once "vendor/autoload.php";
use Aws\S3\S3Client;
$bucket = '--- BUCKET_NAME ---';
$key = '--- KEY_NAME ---';
$secret = '--- SECRET_NAME ---';
// S3クライアントを作成
$s3 = new S3Client(array(
'version' => 'latest',
'credentials' => array(
'key' => $key,
'secret' => $secret,
),
'region' => 'ap-northeast-1', // 東京リージョン
));
// アップロードされた画像の処理
$file = $_FILES['file']['tmp_name'];
if (!is_uploaded_file($file)) {
return;
}
// S3バケットに画像をアップロード
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => time() . '.jpg',
'Body' => fopen($file, 'rb'),
'ACL' => 'public-read', // 画像は一般公開されます
'ContentType' => mime_content_type($file),
));
// 結果を表示
echo "<pre>";
var_dump($result);
echo "</pre>";
?>
レスポンスはとりあえずvar_dumpで表示させておきます。
S3バケットの画像を一覧表示する画面
S3バケットの画像をすべて取得して表示する画面です。
filelist.php
<?php
require_once "vendor/autoload.php";
use Aws\S3\S3Client;
$bucket = '--- BUCKET_NAME ---';
$key = '--- KEY_NAME ---';
$secret = '--- SECRET_NAME ---';
// S3クライアントを作成
$s3 = new S3Client(array(
'version' => 'latest',
'credentials' => array(
'key' => $key,
'secret' => $secret,
),
'region' => 'ap-northeast-1', // 東京リージョン
));
// S3バケットの画像を全て取得
$objects = $s3->listObjects(array(
'Bucket' => $bucket
));
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>FileList</title>
</head>
<body>
<?php foreach ($objects['Contents'] as $object) { ?>
<img width="300" src="https://s3-ap-northeast-1.amazonaws.com/<?php echo $bucket ?>/<?php echo $object['Key'] ?>" /><br />
<?php } ?>
</body>
</html>
ページを開くとS3バケットにアップロードした画像が表示されます。
簡単なサンプルですが、以上で終わりです。