PHP 용 AWS SDK 빠른 설치 이미지를 사용하여 업로드

10359 단어 AWSS3PHP
이 글은 PHP Advent Calendar 2021 16일째 되는 글이다.
15일차 기사는 @opy 기고한 PHP로 제작된 아날로그 슬라이드 및 모바일 컨트롤러,
17일째 보도는 @iamyukihiro씨가 투고한 것Linux 서버에서 PHP 내장 서버를 설계하는 이야기이다.
본문 개요
AWS SDK for PHP를 사용하여 S3의 지정된 통에 이미지를 업로드합니다.
  • AWS 계정
  • 라는 전제하에 진행한다.
    1. 도입
    이번에 사용한 프로그램 라이브러리를 가져옵니다.
    PHP 용 AWS SDK 가져오기
    참조: Installing the AWS SDK for PHP Version 3 - AWS SDK for PHP
    도입 방법은 여러 가지가 있는데 이번에는 정통Composer을 사용했다.
    방법이 간단하여 프로젝트의 기본 디렉터리에
    composer require aws/aws-sdk-php
    
    명령만 실행합니다.
    실행 후
    composer show -i
    
    등이 표시한 포장 일람표에 aws/aws-sdk-php가 추가되면 성공이다.
    phpdotenv 가져오기
    환경 변수 설정 라이브러리.
    후술한 코드에서 사용했다phpdotenv
    가져오지 않은 사람
    composer require vlucas/phpdotenv
    
    를 참고하십시오.
    2. S3에서 물통 만들기
    구간을 만듭니다.
    AWS 관리 콘솔에 들어가면 S3를 열고 물통을 만든다.

    여기 통 이름은 php-advent2021-sdk-upload입니다.
    독특한 이름이 필요해서 "쓰고 있어요!"이렇게 욕을 먹으면 다른 이름을 설정하세요.
    구역은 어디든지 가능하니 어느 구역을 설정했는지 기억하세요.
    다른 설정은 기본값으로 해도 됩니다.
    확인되면 만들어 봐.
    3. AWS에 접근한 키 정보 얻기
    참조: IAM 사용자의 액세스 키 관리 - AWS Identity 및 Access 관리
    S3에 연결할 수 있도록.
  • 액세스 키 ID
  • 비밀 접근 키
  • 두 개가 필요합니다.
    보안 인증 정보 화면을 열고 액세스 키(액세스 키 ID 및 비밀 액세스 키) 영역을 엽니다.

    새 액세스 키를 만든 후 키 파일을 다운로드합니다.
    rootkey.csv 이런 파일은 다운로드할 수 있다
    파일을 열어 액세스 키 ID와 비밀 액세스 키 정보를 확인합니다.
    env 파일 만들기
    상기 방문 정보를 기술한 파일.env을 제작하여 프로젝트 디렉터리에 미리 설정합니다.
    AWS_ACCESS_KEY_ID="XXXXXXXXXXXXXXXXXXXX"
    AWS_SECRET_ACCESS_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    
    액세스 키 IDAWS_ACCESS_KEY_ID비밀 접근 키AWS_SECRET_ACCESS_KEY라는 메시지를 남겼다.
    4. 설치
    참조: Creating and Using Amazon S3 Buckets with the AWS SDK for PHP Version 3 - AWS SDK for PHP
    다음은 실제 코드입니다.
    <?php
    require './vendor/autoload.php';
    
    use Aws\S3\Exception\S3Exception;
    use Aws\S3\S3Client;
    
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->safeLoad();
    
    function main()
    {
        $credentials = [
            'key'    => $_ENV['AWS_ACCESS_KEY_ID'],
            'secret' => $_ENV['AWS_SECRET_ACCESS_KEY'],
        ];
    
        $bucket        = 'php-advent2021-sdk-upload';
        $srcFilePath   = 'ソースファイルのディレクトリパスをここに記述';
        $extension     = pathinfo($srcFilePath, PATHINFO_EXTENSION);
        $key           = 'test' . '.' . $extension;
    
        try {
            $s3Client = new S3Client([
                'region'      => 'ap-northeast-1',
                'version'     => '2006-03-01',
                'credentials' => $credentials,
            ]);
            $result = $s3Client->putObject([
                'Bucket'     => $bucket,
                'Key'        => $key,
                'SourceFile' => $srcFilePath,
            ]);
        } catch (S3Exception $e) {
            echo $e->getMessage() . "\n";
        }
    
    }
    
    main();
    
    $bucket업로드하려는 이미지 파일의 디렉토리 경로를 $srcFilePath에 기술하십시오.
    해설
    필수 코드 블록은 두 개입니다.
    S3에 대한 연결
    $s3Client = new S3Client([
      'region'      => 'ap-northeast-1',
      'version'     => '2006-03-01',
      'credentials' => $credentials,
    ]);
    
    region 구간을 생성한 구역을 기술한다.version에 버전을 지정합니다.슬롯 설정을 사용한 것 이외에 이 상태를 유지할 수 있습니다.credentials에 액세스 키 ID와 비밀 액세스 키를 입력합니다.
    S3 섹션에 업로드
    $result = $s3Client->putObject([
      'Bucket'     => $bucket,
      'Key'        => $key,
      'SourceFile' => $srcFilePath,
    ]);
    
    Bucket에는 올릴 통 이름이 기술되어 있다.Key 통 아래의 파일 경로와 파일 이름을 설정합니다.
    이렇게 하면 확장자가 없는 파일이 업로드되기 때문에 pathinfo로 확장자$extension를 만들어서 저장합니다.SourceFile 업로드할 파일의 절대 경로를 지정합니다.
    그런 다음 이미지가 S3 구간에 업로드되었습니다.

    총결산
    이 기사의 코드를 적용하면
    고객이 이미지 경로 POST를 보낸 후 업로드할 수 있는 API
    꼭 활용하세요.
    참고로 이 설정에서는 브라우저에서 업로드된 이미지를 확인할 수 없습니다.
    S3 청크에 대한 공용 액세스 설정을 적절하게 설정할 필요가 있습니다.
    (기본적으로 공용 액세스는 차단됨)
    이미지에 대한 확인은 읽기 전용 접근 허가만 주면 된다.
    ※ 요청이 많으면 이 점을 자세히 정리해 보고 싶습니다.
    액세스 설정 참조:
  • 버킷 정책의 예 "익명의 사용자에게 읽기 전용 액세스 허용" - Amazon Simple Storage 서비스
  • Amazon S3: 세 개의 세그먼트를 읽고 쓸 수 있는 객체 - AWS Identity 및 Access Management
  • 좋은 웹페이지 즐겨찾기