티스토리 뷰
AWS SDK for PHP
SDK 설치
!!주의. PHP 버전 5.5 이상 사용 중인지 확인
다음 방법으로 AWS SDK for PHP 버전 3을 설치할 수 있습니다.
SDK 기본 사용법
설치 기법 | Require 명령문 |
생성자 사용 | require '/path/to/vendor/autoload.php'; |
phar 사용 | require '/path/to/aws.phar'; |
ZIP 사용 | require '/path/to/aws-autoloader.php'; |
클라이언트 만들기
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
//Create a S3Client
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-east-2'
]);
SDK 코드 준비
<?php
// AWS SDK for PHP => ZIP =>
require 'lib/aws/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
// Hard-coded credentials
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'ap-northeast-2',
'credentials' => [
'key' => 'key',
'secret' => 'key',
],
]);
에러 발생
에러 : Call to Undefined Function idn_to_ascii()
에러 발생 위치 : GuzzleHttp : idn_to_ascii
에러 해결 방법 : PHP > intl 익스텐션 설치 해야 함 > 동작해야하는 함수 : idn_to_ascii()
에러 원인 :
PHP 에서 정의되지 않은 함수 idn_to_ascii() 는 내장함수라고 생각할 수 있지만 항상 그런것이 아님에 주의해야한다
int 모듈은 PHP 에 유니코드와 인터내셔널 함수를 제공한다
또한 날짜 및 시간 형식에 유용한 많은 기능을 제공하는데
그러한 함수중의 하나가 idn_to_ascii 이다
유니코드로된 도메인 이름을 IDNA ASCII 형식으로 변환하는데 사용한다
IDNA : Internationalized Domain Name 다국어도메인
말그대로 알파벳,아랍어,중국어,키릴문자,데바 나가리을, 히브리어, 라틴어..
문자 분음 합자 프랑스어등의 UTF-8 도메인을
Bücher.example => xn--bcher-kva.example 으로 인코딩 된다.
echo idn_to_ascii('Bücher.example'); //xn--bcher-kva.example
s3.html
이미지 업로드 준비
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
</head>
<body>
<form enctype="multipart/form-data" action="s3_receiver.php" method="POST">
<p><label></label><input name="bn_img" type="file" /></p>
<p><label></label><button type="submit">업로드</button></p>
</form>
</body>
</html>
s3_receiver.php
이미지 업로드
<?php
define("BUCKET", "project");
define("KEY", "AABBCCDDEEFFGGHHII");
define("SECRET", "Qweryt+Qwertyu+qwert/Qweerrt");
define("S3_URL", 'https://s3.ap-northeast-2.amazonaws.com/');
//
define("S3_PATH", 'images/');
define("IMAGE_PATH", $_SERVER['DOCUMENT_ROOT']."/include/files/");
require $_SERVER['DOCUMENT_ROOT'].'/lib/aws/aws-autoloader.php'; // /home/web/project.com/public/lib/aws/aws-autoloader.php
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$src = $_FILES["bn_img"]['tmp_name'];
$ext = pathinfo($_FILES["bn_img"]['name'], PATHINFO_EXTENSION);
$filename = uniqid(rand(), TRUE).".".$ext; // 변경된이미지이름.확장자
$org_name = $_FILES["bn_img"]['name']; // 오리지널이미지이름.확장자
// AWS S3
$s3Config = array(
'credentials' => array(
'key' => KEY,
'secret' => SECRET,
),
'region' => 'ap-northeast-2',
'version' => 'latest',
);
$s3 = Aws\S3\S3Client::factory($s3Config);
$filepath = IMAGE_PATH.$filename; // /home/web/project.com/include/files/imgname.png
if (!move_uploaded_file($_FILES['bn_img']['tmp_name'], $filepath)) exit('Failed to upload');
$key = S3_PATH.$filename; // images/imgname.png
// Upload a file.
$result = $s3->putObject(array(
'Bucket' => BUCKET,
'Key' => $key,
'Body' => fopen($filepath, 'rb'),
'ContentType' => mime_content_type($filepath)
));
@unlink($filepath);
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
</head>
<body>
<pre>
<?php
var_dump( $result->toArray() );
?>
</pre>
<img src="<?="https://s3.ap-northeast-2.amazonaws.com/".BUCKET."/{$key}"?>" />
<form action="s3_delete.php" method="POST">
<input type='hidden' name='key' value='<?=$key?>' />
<p>이미지 : <?=$key?><p>
<p><label></label><button type="submit">삭제</button></p>
</form>
</body>
</html>
s3_delete.php
업로드 된 이미지 삭제 ( 이미지가 나오지 않아야 제대로 삭제된 것임 )
<?php
define("BUCKET", "project");
define("KEY", "AABBCCDDEEFFGGHHII");
define("SECRET", "Qweryt+Qwertyu+qwert/Qweerrt");
define("S3_URL", 'https://s3.ap-northeast-2.amazonaws.com/');
//
define("S3_PATH", 'images/');
define("IMAGE_PATH", $_SERVER['DOCUMENT_ROOT']."/include/files/");
require $_SERVER['DOCUMENT_ROOT'].'/lib/aws/aws-autoloader.php'; // /home/web/project.com/public/lib/aws/aws-autoloader.php
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$s3Config = array(
'credentials' => array(
'key' => KEY,
'secret' => SECRET
),
'region' => 'ap-northeast-2',
'version' => 'latest',
);
$s3 = Aws\S3\S3Client::factory($s3Config);
$sql = "select bn_img from banner where bn_idx = {$bn_idx}";
$key = $_POST['key'];
$s3->deleteObject([
'Bucket' => BUCKET,
'Key' => $key
]);
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
</head>
<body>
<p>삭제가 완료되었습니다 : 이미지가 안나오면 정상입니다</p>
<p>삭제된 이미지 : <?=$key?><p>
<img src="<?="https://s3.ap-northeast-2.amazonaws.com/".BUCKET."/{$key}"?>" />
</body>
</html>
'■ 백엔드 ■ > PHP' 카테고리의 다른 글
기 로그인된 세션 삭제 (0) | 2019.02.19 |
---|---|
ajax 413 Request Entity Too Large error (0) | 2018.12.07 |
PDO SQL 인젝션을 막기위한 처리 (0) | 2018.11.22 |
PDO Tutorial for MySQL Developers (0) | 2018.11.22 |
PhpSpreadsheet (2) | 2018.07.26 |