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. ZZYYTT
    http://www.mbtshoesonline.com
    http://www.kevindurant-shoes.us.com
    http://www.yeezy-boost.us.com
    http://www.goyardbags.us
    http://www.katespadehandbags-outlet.us.com
    http://www.yeezy-shoes.org.uk
    http://www.balenciaga.us.com
    http://www.ultraboost.us.com
    http://www.longchamphandbagsoutlets.com
    http://www.yesyeezy.shop......tml
    http://www.kd11.us
    http://www.adidas-tubular.us.com
    http://www.mlbjerseys.in.net
    http://www.yeezyboost-350v2.us.com
    http://www.jordan6.us.com
    http://www.supremeclothing.us
    http://www.balenciagashoes.us.org
    http://www.airmax90.us.org
    http://www.yeezyshoesuk.com
    http://www.goldengoosesneakers.us
    http://www.yeezy-boost350.us.com
    http://www.calvinkleinoutlet.us.com
    http://www.lebronjames-shoes.us.com
    http://www.supremehoodie.us.com
    http://www.yeezysuk.com
    http://www.yeezyboost.in.net
    http://www.goyardhandbags.us.com
    http://www.hermesbelts.com
    http://www.michael-kors-handbags.org.uk
    http://www.balenciagashoes.us.com
    http://www.coachoutletstorefactory.com
    http://www.jordan13.us.com
    http://www.rolex-replica.us.com
    http://www.hermes-belt.us.com
    http://www.coachoutletssale.com
    http://www.nhljerseysshop.us.com
    http://www.yesyeezy.shop......tml
    http://www.kyrie3.us.com
    http://www.michaelkors-outletonlines.us.com
    http://www.nike-shox.us.com
    http://www.cheap-airjordans.us.com
    http://www.jordanssneakers.us.com
    http://www.nikejordans.us.com
    http://www.nikebasketballshoes.us.com
    http://www.yesyeezy.shop
    http://www.adidasultraboost.us.org
    http://www.jordan11retro.us.com
    http://www.chromeheartsstore.us
    http://www.goldengoose.us.com
    http://www.paulgeorgeshoes.us.com
    http://www.yeezy-500.us.com
    http://www.michaeljordanshoes.us.com
    http://www.adidas-nmds.us.com
    http://www.nikeairforce1.us.com
    http://www.redbottom-shoes.us.com
    http://www.adidasstansmith.uk
    http://www.goldengoose-sneakers.com
    http://www.lebron16.us.com
    http://www.hermeshandbags.us.org
    http://www.adidasnmds.com
    http://www.offwhite.us.com
    http://www.yeezysshoes.us.com
    http://www.airjordanretro.uk
    http://www.lacostepolo.us.com
    http://www.toryburchs.us
    http://www.adidaszxflux.com
    http://www.monclerjackets.us
    http://www.yeezy-shoes.org
    http://www.long-champ.us.com
    http://www.kd11.us.com
    http://www.lebron16.us
    http://www.filashoes.org
    http://www.goyard-handbags.us.com
    http://www.hermes-birkin.us.com
    http://www.monclerjacket.net
    http://www.nikeair-max.us.com
    http://www.hardenshoes.us.com
    http://www.ferragamobelt.us.org
    http://www.converseoutlet.us.com
    http://www.chromehearts.name
    http://www.yeezy-shoes.ca
    http://www.linksoflondon.us.com
    http://www.goyardhandbags.org
    http://www.nikehuaracheshoes.us.com
    http://www.adidasiniki.us
    http://www.lacosteonlineshop.us.com
    http://www.jordanshoes.org.uk
    http://www.yesyeezy.shop/adidas-yeezy-desert-rat-500-blush-db2908-p-425.html
    http://www.caterpillarboots.us.com
    http://www.canada--goose.co.uk
    http://www.nike-hyperdunk.us.com
    http://www.guccibelt.us.com
    http://www.off-whiteshoes.us.com
    http://www.bape-hoodie.us.com
    http://www.nikefoamposite.us.com
    http://www.pandorabracelet.in.net
    http://www.outlettimberland.us.org
    http://www.kyrie4.org
    http://www.yeezyboost.com.co
    http://www.handbagsmichaelkors.com
    http://www.nike-roshe.us.com
    http://www.nikecortez.us.com
    http://www.goyard.us.com
    http://www.long-champhandbags.org.uk
    http://www.polosralphlaurenuk.com
    http://www.russellwestbrookshoes.us.com
    http://www.jordansshoes.us.org
    http://www.michael-korsoutlets.us
    http://www.shoesjordan.us.com
    http://www.yeezy700.us.com
    http://www.vans-outlet.us.com
    http://www.michael-kors-handbags.com.co
    http://www.goldengoose-sneakers.us
    http://www.lacostepolosshirts.com
    http://www.golden-goose.us.com
    http://www.kd-10.us
    http://www.longchamp-bags.us.org
    http://www.hermes-handbags.us.com
    http://www.yesyeezy.shop/supreme-x-nike-air-more-uptempo-varsity-redwhite-902290600-p-592.html
    http://www.hoganoutletonline.us.com
    http://www.nikepolo.us
    http://www.longchamphandbagsonlines.com
    http://www.retro-jordans.us.com
    http://www.curry5.us
    http://www.nikeairmax2018.us.com
    http://www.kobeshoes.uk
    http://www.michaelkors-outletstore.com
    http://www.nike-airmax2017.us.com
    http://www.asics-shoes.us.org
    http://www.adidasgazelle.us.com
    http://www.yeezy-boosts.us.com
    http://www.yeezyboost350v2.org.uk
    http://www.fila.us.org
    http://www.yesyeezy.shop/adidas-ultra-boost-c-82_89.html
    http://www.kobe-shoes.us.com
    http://www.lebron15.net
    http://www.hermesbelts.co.uk
    http://www.yesyeezy.shop/adidas-yeezy-boost-350-v2-beluga-solar-red-bb1826-p-422.html
    http://www.outletlacoste.us.com
    http://www.adidasshoesonline.com
    http://www.adidasstansmith.us.com
    http://www.adidasyeezys.us
    http://www.kobesneakers.com
    http://www.adidasyeezys.us.com
    http://www.jordan-retro.us.com
    http://www.goldengooseoutlet.us
    http://www.kyrieirving-shoes.us.com
    http://www.kobebasketballshoes.net
    http://www.fakerolex.us.com
    http://www.coachsonline.us.com
    http://www.coachoutletsfactory.com
    http://www.nikeairmax2019.us.com
    http://www.nikereact.org
    http://www.nikereact.us.com
    http://www.jordan12.us.com
    http://www.michaelkors-outletfactory.us.org
    http://www.vapormaxshoes.us
    http://www.jordan4.us.com
    http://www.offwhiteclothing.us.com
    http://www.birkinbag.us.com
    http://www.adidaseqts.com
    http://www.adidas-crazyexplosive.us.com
    http://www.yesyeezy.shop/adidas-yeezy-700-boost-wave-runner-b75571-p-428.html
    http://www.filas.us.com
    http://www.jordansforcheap.us.com
    http://www.yeezyboost-350.uk
    http://www.yesyeezy.shop/nike-air-max-197-sean-wotherspoon-aj4219400-p-66.html
    http://www.yeezy500.us
    http://www.outletmichael-kors.us.com
    http://www.nikeflyknit.us.com
    http://www.airmax270.us.com
    http://www.curry5.us.com
    http://www.adidas-pureboost.us.com
    http://www.curry4shoes.us.com
    http://www.valentinos.us.com
    http://www.cheapnbajerseyswholesales.us.com
    http://www.chromehearts.com.co
    http://www.bapehoodie.us
    http://www.nike-huarache.com
    http://www.adidasnmduk.com
    http://www.goldengoose-outlet.us.com
    http://www.coachoutlets.name
    http://www.offwhitexjordan1.com
    http://www.lebron16.net
    http://www.yesyeezy.shop/adidas-pharrell-williams-c-82_88.html
    http://www.yesyeezy.shop/offwhite-air-jordan-1-retro-chicago-the-ten-aa3834101-p-837.html
    http://www.yeezyboost350v2shoes.us.com
    http://www.adidasoutletonline.com
    http://www.yslhandbags.net
    http://www.yesyeezy.shop/offwhite-x-nike-air-presto-black-aa3830002-p-291.html
    http://www.air-max.us.com
    http://www.hermesonlineshop.com
    http://www.michaelkorsoutletonlineus.com
    http://www.outletonline-michaelkors.us.org
    http://www.yesyeezy.shop/balenciaga-17fw-triple-s-black-pink-women-sneaker-483523w06e38080-p-618.html
    http://www.michael--korsoutlet.us.org
    http://www.yesyeezy.shop/balenciaga-17fw-triple-s-trainer-black-red-mens-w05m23972-p-613.html
    http://www.jimmychoo-shoes.us.com
    http://www.reebokoutlet.us.org
    http://www.offwhitehoodie.us.com
    http://www.nikesneakers.us.com
    http://www.yeezy-shoes.us.org
    http://www.curry4.us.com
    http://www.adidasyeezy.co.uk
    http://www.monclersoutlet.us.com
    http://www.nfljerseys.us.org
    http://www.ferragamobelt.us
    http://www.fitflops-saleclearance.us.com
    http://www.adidassuperstar.us.com
    http://www.fila-shoes.us.com
    http://www.louboutinshoes.uk
  2. lunaman
    오제관님 2번 답변 따라해서 해결 되었네요. 감사합니다.
  3. lunaman
    1
    대화보기
    • 모든 댓글 다 읽고 해봤는데 저는 이런 에러가납니다 ㅠㅠ 도대체 무슨소리인지 ㅠㅠ
      구글에도 안나와서 답답해요..혹시 아시는분 계신가요..?
      -> Entering step init, name 'idempotency_auto_fill'
      ---------------------------------------------------

      command was set to array(3) {
      ["instance"]=>
      string(32) "0000000004a06dbc000000003bb87a04"
      ["name"]=>
      string(9) "PutObject"
      ["params"]=>
      array(5) {
      ["ACL"]=>
      string(11) "public-read"
      ["SourceFile"]=>
      NULL
      ["Bucket"]=>
      string(17) "codingeverybody93"
      ["Key"]=>
      NULL
      ["@http"]=>
      array(1) {
      ["debug"]=>
      resource(2) of type (stream)
      }
      }
      }

      request was set to array(0) {
      }



      -> Entering step init, name 's3.ssec'
      -------------------------------------

      no changes


      -> Entering step init, name 's3.source_file'
      --------------------------------------------

      no changes


      -> Entering step init, name 's3.save_as'
      ----------------------------------------

      no changes


      -> Entering step init, name 's3.location'
      -----------------------------------------

      no changes


      -> Entering step init, name 's3.auto_encode'
      --------------------------------------------

      no changes


      -> Entering step init, name 's3.head_object'
      --------------------------------------------

      no changes
    • yoojat
      와 2번 덕분에 해결했습니다 감사합니다 ㅠㅠ
      대화보기
      • 오제관
        500 에러에 관해
        1. 정확히 에러가 무엇인지 봅시다.
        $s3 = new Aws\S3\S3Client([
        'region'=>'ap-northeast-2',
        'version'=>'2006-03-01',
        'debug'=> true
        ]);
        클라이언트 오브젝트 생성시 debug라는 키에 트루를 주면 어디서 에러가 나왔는지 볼 수 있습니다.

        2. Error retrieving credentials from the instance profile metadata server
        저 또한 이 에러를 발견했습니다.
        문제의 원인은 이렇습니다.
        [credentials에 우리가 저장한 키와 시크릿키를 브라우저에서 실행하니 참조하지 못한다.]
        $s3 = new Aws\S3\S3Client([
        'region'=>'ap-northeast-2',
        'profile'=>'default',
        'version'=>'2006-03-01',
        'debug'=> true
        ]);
        크레덴셜스 안에 있는 키들의 프로필 명을 직접 가리켰는데도 안되었습니다.
        실제로 vendor/autoload.php를 읽어보고 별내용 없이 autoload_real.php를 리콰이어 하길래 가서 읽어봤더니
        딱히 크레덴셜의 확보에 대한 내용이 어딘지 찾기 어려웠습니다.

        [ 솔루션 ]
        결국 웹애플리케이션 파일 하나하나마다 권한 통제를 포기하고
        EC2에 IAM을 붙이기로 했습니다.

        EC2콘솔 -> 인스턴스 오른쪽 클릭 -> 인스턴스 세팅 -> Attach/Replace IAM role 클릭
        (저처럼 직접만드는 분들은 아마 IAM롤을 만들어두지 않았을 겁니다)
        -Create new IAM role 클릭
        -Create new role 클릭
        -이름을 정합니다.
        -AWS service roles 에서 [Amazon EC2]를 선택하고 다음
        -[AmazonS3FullAccess]을 체크하고 다음
        -create Role
        이제 다시 EC2콘솔의 IAM role 선택 창으로 돌아가 옆의 새로고침누르면 방금 만든 IAM롤이 뜰겁니다.
        선택하시고 적용 - > reboot

        저는 이후로 완벽히 동작하고 있습니다. 다른 분들도 도움이 되셨으면 좋겠네요.
      • 시험모드
        음.. 우선 500 에러 에 대한 해결방법입니다.

        일단 과정을 말씀드리면..

        제 경우에는
        pubObject부분에서 계속 에러가 발생했기 때문에
        try catch 문을 넣어서 에러를 뽑았습니다.

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

        에러 로그를 보니..
        Error retrieving credentials from the instance profile metadata server
        이런 문구가 보이더군요.

        뭐.. 인증 정보가 제대로 인식이 안되는것 같습니다.

        그래서 우선,
        $param = Array('region'=>'ap-northeast-2', 'version'=>'2006-03-01', 'credentials' => array(
        'key' => '서버키',
        'secret' => '보안키',
        ));

        의 형태로 강제로 인증키를 넣어보았더니.. 에러 없이 파일이 잘 들어가더라구요.

        테스트 단계라 다른 인증방식은 사용해 보지 않았지만..
        인증키 부분만 잘 삽입되도록 하면 될 것같습니다.


        이걸 몰라서.. 이전에는 ec2 instance 새로 만들어서 IAM role 부여해서 했었는데..
        이번에는 다행히도 해결책을 찾았네요.

        도움이 되셨으면 좋겠습니다.
        대화보기
        • 시험모드
          답변 달아주신 그 부분에서 막히고 있습니다.

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

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

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