일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- qoddi
- AWS
- naver api
- fly.io
- Github Pages
- dependencies
- 배포
- dependabot
- package.json
- node.js
- .eslintrc
- php
- hooks
- CSS
- Next.js
- heroku
- GitHub
- gh-pages
- Web Storage
- touch event
- multer-s3
- aws-sdk
- createRoot
- npm-check-updates
- 클린코드
- react
- react18
- bucket
- s3
- 반응형
- Today
- Total
Ann's log
[PHP] PHP 프로젝트에서 Amazon S3 사용하기 본문
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
'PHP' 카테고리의 다른 글
[PHP] Qoddi로 PHP 프로젝트 배포하기 (0) | 2022.11.28 |
---|---|
[PHP] Heroku를 이용하여 PHP 프로젝트 배포하기 (0) | 2022.02.14 |