LoginSignup
17
20

More than 5 years have passed since last update.

PHPでAmazon S3に画像アップロードと、画像一覧表示するサンプルプログラム

Posted at

はじめに

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>

JPEGの画像ファイルを選択して、送信ボタンを押します。
s3_1.png

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バケットにアップロードした画像が表示されます。
s3_3.png

簡単なサンプルですが、以上で終わりです。

17
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
20