Ann's log

[PHP] PHP 프로젝트에서 Amazon S3 사용하기 본문

PHP

[PHP] PHP 프로젝트에서 Amazon S3 사용하기

-Ann- 2022. 6. 16. 22:49

 

PHP logo image

 

PHP 프로젝트도 Heroku로 배포했기 때문에 다른 프로젝트처럼 사진 파일 업로드 문제가 똑같이 발생하는 것을 확인하였다.

따라서 PHP 프로젝트에서도 Heroku 문서에 나와있는 것처럼 Amazon S3를 사용해 보려고 한다.

(S3 bucket을 생성하는 방법은 이전 포스팅 참고)

 

 

이 글에서 정리하는 내용:

1. AWS SDK for PHP 설치하기

2. aws-sdk-php 사용하여 사진 파일 업로드하기

 

 

AWS SDK for PHP 설치하기

프로젝트에 composer가 있는 경우, 다음 명령어로 aws-sdk-php를 설치하면 된다. (AWS 공식문서 참고)

$ composer require aws/aws-sdk-php

 

 

aws-sdk-php 사용하여 사진 파일 업로드하기

① 파일을 업로드하기 전에 aws-sdk-php를 사용하기 위한 설정하기

<?php
    require '../vendor/autoload.php';   // php 스크립트에 자동 로더 추가
    
    use Aws\S3\S3Client;
    use Aws\Exception\AwsException;

    // aws-sdk-php 사용 설정
    $awsConfigs = [
        'version'  => 'latest',
        'region'   => 'us-east-1',
        'credentials' => [
            'key'    => getenv("S3_ACCESS_KEY_ID"), 
            'secret' => getenv("S3_SECRET_ACCESS_KEY"),
        ],
    ];
    
    $sdk = new Aws\Sdk($awsConfigs);
    $s3Client = $sdk->createS3();
?>

스크립트에서 AWS SDK for PHP를 활용하려면 스크립트 상단에 자동 로더를 포함해야 한다.

그리고 S3에 파일 업로드를 할 때 필요한 클래스들을 불러온 후, 연결 설정 정보를 가진 객체를 생성한다.

(나는 heroku의 config vars 설정 후 getenv로 정보를 가져오도록 했다)

그다음, 연결 정보를 사용하여 createS3()를 해주면 준비는 완료됨.

 

② form으로부터 전달 받은 파일을 s3 bucket에 업로드 하기

<?php
    // 이미지 파일을 s3 bucket에 업로드 하기
    $bucket = getenv("S3_BUCKET_NAME");   // s3 bucket 이름
    $resFile = "upload/{$_FILES['imgFile']['name']}";   // 새로 저장할 위치와 이름 지정
    $fp = fopen($_FILES['imgFile']['tmp_name'], 'r');
    
    $result = $s3Client->putObject([
        'Bucket' => $bucket,
        'Key' => $resFile,
        'Body' => $fp,
    ]);
?>

나는 bucket 안에 있는 upload/ 폴더 안에 이미지 파일을 넣어주기 위해 $resFile 변수를 설정하였다.

putObject()를 사용하면 s3에 파일을 업로드하는 작업을 실행할 수 있다.

참고로, fopen() 함수는 파일을 여는 역할을 하는데 file pointer resource를 리턴한다고 한다. (출처: php 공식문서

 

 

테스트 해본 결과 S3 bucket에 사진 파일 업로드가 정상적으로 진행된다! 😄

React에서 적용했던 것보다 좀 어려운 느낌이었다.. 😅

 

 


참고:

https://docs.aws.amazon.com/ko_kr/sdk-for-php/v3/developer-guide/getting-started_basic-usage.html

https://github.com/aws/aws-sdk-php

http://eg3020.blogspot.com/2020/11/aws-php-s3-cloudfront.html

https://blog.webi.kr/entry/PHP%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-AWS-S3-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EC%97%90-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-%ED%95%98%EA%B8%B0

Comments