Amazon Web Services

PHP를 위한 S3 SDK

본 수업은 PHP SDK를 이용해서 S3를 이용하는 방법에 대한 수업입니다. 

선수학습

본 수업은 AWS SDK for PHP 수업을 먼저 들으셔야 합니다. 

권한

본 수업을 진행하기 위해서는 사용자나 역할이 AmazonS3FullAccess 권한이 있어야 합니다. 

API 사용법

파일 전송

s3_put.php

<?php
require 'vendor/autoload.php';
$param = Array('region'=>'ap-northeast-2', 'version'=>'2006-03-01');
$s3 = new Aws\S3\S3Client($param);
$s3->putObject(Array(
    'ACL'=>'public-read',
    'SourceFile'=>'sample.txt',
    'Bucket'=>'codingeverybody2',
    'Key'=>'sample.txt'
));
?>

파일 목록 가져오기

s3_list.php

<?php
require 'vendor/autoload.php';
$param = Array('region'=>'ap-northeast-2', 'version'=>'2006-03-01');
$s3 = new Aws\S3\S3Client($param);
$list = $s3->listObjects(Array('Bucket'=>'codingeverybody2'));
$listArray = $list->toArray();
foreach($listArray['Contents'] as $item){
    print($item['Key']."\n");
}
?>

파일 다운로드

s3_get.php

<?php
require 'vendor/autoload.php';
$param = Array('region'=>'ap-northeast-2', 'version'=>'2006-03-01');
$s3 = new Aws\S3\S3Client($param);
$s3->getObject(Array(
    'Bucket'=>'codingeverybody2',
    'Key'=>'sample.txt',
    'SaveAs'=>fopen('sample_saved.txt', 'w')
));

웹애플리케이션에서 S3 활용

업로드 폼

upload.html

<html>
<body>
    <form enctype="multipart/form-data" action="./s3_upload.php" method="POST">
        <input type="file" name="userfile">
        <input type="submit">
    </form>
</body>
</html>

s3로 파일 전송

s3_upload.php

<?php
require 'vendor/autoload.php';
$param = Array('region'=>'ap-northeast-2', 'version'=>'2006-03-01');
$s3 = new Aws\S3\S3Client($param);
$result = $s3->putObject(Array(
    'ACL'=>'public-read',
    'SourceFile'=>$_FILES['userfile']['tmp_name'],
    'Bucket'=>'codingeverybody2',
    'Key'=>$_FILES['userfile']['name'],
    'ContentType'=>$_FILES['userfile']['type']
));
unlink($_FILES['userfile']['tmp_name']);
$resultArray = $result->toArray();
var_dump($resultArray['ObjectURL']);
?>
<html>
<body>
<img src="<?php print($resultArray['ObjectURL']);?>" style="width:100%">
</body>
</html>

댓글

댓글 본문
작성자
비밀번호
  1. 시험모드
    답변 달아주신 그 부분에서 막히고 있습니다.

    CLI 로 실행하면 다운로드가 잘 되는데,
    브라우저 에서 실행하면 500 에러가 뜨고 아무 반응이 없습니다.

    로컬이 아닌 AWS EC2+S3 사용중이에요.

    IAM role을 부여하면 해결된다고 하셨는데..혹시 방법 좀 알 수 있을까요?
    대화보기
    • 구녹수수
      저도 서버오류500이 발생하는데 어떻게 해야하나요?
    • fabxoe
      9분 20초 무렵에, 저도 서버오류 500이 발생했어요.
    • SK Kim
      마지막 부분 작동이 안되어서 좀 고생했네요.
      원격으로 CLI에서 PHP가 정상 작동되지만 browser를 사용하면 서버오류 500가 나면서 작동을 안합니다.
      AWS를 사용하면 instance 생성시 IAM role을 부여하면 문제가 해결 되는데...
      로컬 환경에서 VM으로 서버를 생성하면 문제는 그대로 있네요.
    • egoing
      수정했습니다 ^^
      대화보기
      • 강의 잘보고 있습니다! 글에 있는 s3_get.php에 해당하는 소스코드가 잘못 된 것 같네요.
      버전 관리
      egoing
      현재 버전
      선택 버전
      graphittie 자세히 보기