라떼군 이야기
PHP를 이용한 AWS S3에 파일 업로드
Problem
PHP
를 이용할 경우 별도의 컴포넌트 설치가 필요하므로 처음 작업에 어려움이 있을 수도 있어 정리가 필요했다. PHP
를 이용해서 AWS S3
에 파일을 업로드 하기 위한 방법과 샘플 코드를 정리해 본다.
Solution
먼저 디렉터리에 아래 명령으로 먼저 Composer
를 설치한다. Composer
에 대해 더 자세한 정보는 여기에서 확인이 가능하다.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Composer
를 설치했다면 aws-sdk-php
라이브러리 설치할 차례이다. 아래 명령으로 설치가 가능하다.
composer require aws/aws-sdk-php
composer require aws/aws-php-sns-message-validator
또는
php -d memory_limit=-1 composer.phar require aws/aws-sdk-php
php -d memory_limit=-1 composer.phar require aws/aws-php-sns-message-validator
설치가 완료되면 아래처럼 vender
폴더가 생성된 것을 확인할 수 있다.
파일 업로드하기 위한 샘플 코드는 아래와 같다. KEY
, SECRET
, BUCKET
과 $source
는 상황에 맞게 설정하면 된다.
<?
require '../../vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use Aws\S3\MultipartUploader;
use Aws\Exception\MultipartUploadException;
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'ap-northeast-2',
'credentials' => [
'key' => '[KEY]',
'secret' => '[SECRET]'
]
]);
$bucket = '[BUCKET]';
$source = 'sample.mp4';
$uploadKey = uniqid('video_', true) . '.' . end(explode('.', $source));
$uploader = new MultipartUploader($s3Client, $source, [
'bucket' => $bucket,
'key' => $uploadKey,
]);
try {
$result = $uploader->upload();
echo "Upload complete: {$result['ObjectURL']}\n";
} catch (MultipartUploadException $e) {
echo $e->getMessage() . "\n";
}
그리고 파일 업로드가 가능하도록 S3
버킷에 권한을 추가해 준다. Resource
와 SourceIP
정보는 상황에 맞게 변경해 한다.