Como usar Amazon S3 e PHP para armazenar e gerenciar arquivos dinamicamente com facilidade

Se você nunca ouviu falar do Amazon S3 ou ainda não tem uma conta, recomendo que consulte a documentação oficial e configure uma conta com ele.

Instalar AWS SDK

Agora, a primeira coisa que precisamos é de uma maneira do PHP se comunicar com o servidor S3. Felizmente, a AWS fornece o PHP SDK oficial que podemos usar para nos comunicar com o S3 e executar diferentes tipos de operações.

O aws/aws-sdk-php é o kit oficial de desenvolvimento de software (SDK) para PHP fornecido pela Amazon Web Services (AWS). Ele permite que os desenvolvedores interajam facilmente com vários serviços da AWS e criem aplicativos que se integram a esses serviços. Ele fornece diferentes classes PHP para vários serviços da AWS, como Amazon S3, Amazon EC2, Amazon DynamoDB, Amazon SQS e muitos outros. Obviamente, no contexto deste tutorial, estamos realmente interessados ​​nas classes relacionadas ao Amazon S3.

Primeiras coisas primeiro, vamos instalar o aws/aws-sdk-php pacote usando composer. Execute o seguinte comando em seu terminal para instalar o aws/aws-sdk-php pacote.

1
$composer require aws/aws-sdk-php

Após a instalação bem-sucedida, ele deve gerar o composer.json arquivo conforme mostrado no trecho a seguir.

1
{
2
    "require": {
3
        "aws/aws-sdk-php": "^3.259"
4
    }
5
}

Crie o formulário de upload HTML

Nesta seção, veremos rapidamente como criar o formulário de upload HTML.

Vá em frente e crie o index.php arquivo com o seguinte conteúdo.

1

2
 xmlns="http://www.w3.org/1999/xhtml">
3
    
4
         http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
        </span>S3 tutorial<span style="color: #bb0066;font-weight: bold">
6
    
7

8
    
9
        

Upload a file

10

11
        Please select a file by clicking the 'Browse' button and press 'Upload' to start uploading your file.

12

13
         action="upload.php" method="post" enctype="multipart/form-data" name="form1" id="form1">
14
           name="theFile" type="file" />
15
           name="Submit" type="submit" value="Upload">
16
        
17
    
18

O arquivo acima contém um formulário para fazer upload de um arquivo. O formulário contém um elemento de entrada do tipo arquivoque permite ao usuário selecionar um arquivo para carregar.

Por fim, há um botão de envio que permite aos usuários fazer upload de arquivos para o S3. É importante observar que, quando um usuário clicar no botão enviar, os dados do formulário serão enviados para o upload.php arquivo conforme especificado no Ação atributo do elemento form.

Feito isso, nosso formulário está pronto. Mais adiante neste artigo, criaremos o código do upload.php arquivo que realmente carrega arquivos para o S3.

Configurar o arquivo de configuração

Antes de prosseguirmos e implementarmos o recurso de upload do S3, vamos criar o config.php arquivo que contém as informações de configuração do S3.

1

2
define("AWS_ACCESS_KEY_ID", "XXXXXXX");
3
define("AWS_ACCESS_KEY_SECRET", "XXXXXXXXXXXXXXXXXXXX");
4
define("AWS_ACCESS_REGION", "XXXXX");
5
define("AWS_BUCKET_NAME", "XXXXXXXX");
6
?>

O código PHP acima define quatro constantes: AWS_ACCESS_KEY_ID, AWS_ACCESS_KEY_SECRET, AWS_ACCESS_REGIONe AWS_BUCKET_NAME.

O AWS_ACCESS_KEY_ID especifica o ID da chave de acesso de sua conta S3. O ID da chave de acesso é um identificador exclusivo usado para autenticar solicitações feitas à API S3.

A seguir, o AWS_ACCESS_KEY_SECRET especifica a chave de acesso secreta de sua conta S3. A chave de acesso secreta é uma chave privada usada para assinar solicitações feitas à API do S3.

A seguir, o AWS_ACCESS_REGION especifica a região da AWS onde o bucket do S3 está localizado.

finalmente, o AWS_BUCKET_NAME especifica o nome do bucket S3 onde os arquivos serão carregados. Este é o nome do bucket com o qual nosso código PHP irá interagir.

Depois de criar uma conta da AWS, você precisará criar uma chave de acesso no Console de gerenciamento da AWS para obter o ID da chave de acesso e a chave de acesso secreta. Para obter a região, acesse o serviço S3 e observe a localização do seu balde. A região será listada na URL do endpoint para o bucket. Será algo como eu-west-1. Por fim, você precisará criar um balde S3 e dar a ele um nome exclusivo, que deve ser o nome do seu balde onde todos os arquivos serão carregados pelo nosso script PHP.

Depois de obter todos os detalhes, certifique-se de definir os valores corretos no config.php arquivo.

Implemente a lógica de upload

Nesta seção, construiremos o upload.php arquivo que contém o código que realmente carrega arquivos para o balde S3.

Vá em frente e crie o upload.php arquivo com o seguinte conteúdo.

1
<?php
2
require 'vendor/autoload.php';
3
require 'config.php';
4

5
use AwsS3S3Client;
6

7
$objAwsS3Client = novo S3Client([
8
    'version' => 'latest',
9
    'region' => AWS_ACCESS_REGION,
10
    'credentials' => [
11
        'key'    => AWS_ACCESS_KEY_ID,
12
        'secret' => AWS_ACCESS_KEY_SECRET
13
    ]
14
]);
15

16
if (isset($_POST['Submit']) && $_POST['Submit'] == 'Upload') {
17
    if (isset($_FILES['theFile']) && $_FILES['theFile']['error'] === UPLOAD_ERR_OK) {
18
        $fileName = $_FILES['theFile']['name'];
19
        $fileTempName = $_FILES['theFile']['tmp_name'];
20
        $fileNameCmps = explode(".", $fileName);
21
        $fileExtension = strtolower(end($fileNameCmps));
22
        
23
        // sanitize file-name
24
        $newFileName = md5(time() . $fileName) . '.' . $fileExtension;
25
        
26
        try {
27
            $objAwsS3Client->putObject([
28
                'Bucket' => AWS_BUCKET_NAME,
29
                'Key'    => $newFileName,
30
                'Body'   => fopen($fileTempName, 'r'),
31
                'ACL'    => 'public-read'
32
            ]);
33
            
34
            echo "We successfully uploaded your file.";
35
        } catch (AwsS3ExceptionS3Exception $e) {
36
            echo "There was an error uploading the file.n";
37
        }
38
    }
39
}
40
?>

O código PHP acima é responsável por carregar um arquivo em um bucket do S3.

Em primeiro lugar, incluímos as dependências necessárias. O config.php arquivo contém as credenciais da AWS e o nome do bucket. O S3Client classe é importada do AWS SDK for PHP usando o use declaração.

Em seguida, criamos um novo S3Client objeto.

Em seguida, verificamos se o arquivo foi carregado com sucesso. Em caso afirmativo, ele obtém o nome e o nome do arquivo temporário do arquivo carregado, limpa o nome do arquivo para evitar quaisquer caracteres ou extensões maliciosos e, em seguida, tenta carregar o arquivo no bucket do S3 usando o putObject método do S3Client objeto. O arquivo carregado recebe um nome exclusivo com base no carimbo de data/hora atual e em sua extensão de arquivo original.

Se o upload for bem-sucedido, o código exibirá uma mensagem de sucesso. Se houver um erro, ele exibe uma mensagem de erro. Você também pode confirmá-lo olhando para o seu balde S3, e o arquivo deve estar lá em caso de upload bem-sucedido.

Obter lista de arquivos enviados do S3

Nesta seção, veremos como você pode recuperar arquivos carregados do bucket S3.

Vá em frente e crie o lista.php arquivo com o seguinte conteúdo.

1

2
require 'vendor/autoload.php';
3
require 'config.php';
4

5
use AwsS3S3Client;
6

7
$objAwsS3Client = novo S3Client([
8
    'version' => 'latest',
9
    'region' => AWS_ACCESS_REGION,
10
    'credentials' => [
11
        'key'    => AWS_ACCESS_KEY_ID,
12
        'secret' => AWS_ACCESS_KEY_SECRET
13
    ]
14
]);
15

16
try {
17
    $objects = $objAwsS3Client->listObjects(['Bucket' => AWS_BUCKET_NAME]);
18

19
    // loop through all files

20
    foreach ($objects['Contents'] as $object) {
21
        echo $object['Key'] . "
"
;
22
    }
23
} catch (AwsS3ExceptionS3Exception $e) {
24
    echo "There was an error fetching data from S3: " . $e->getMessage();
25
}
26
?>

Como você pode ver, ele apenas lista todos os objetos em um bucket do S3 e exibe suas chaves. Nós usamos o listObjects método do S3Client object para recuperar objetos do S3.

Conclusão

Hoje, discutimos o Amazon S3 (Simple Storage Service), que é um serviço de armazenamento de objetos baseado em nuvem. Também analisamos um código PHP simples que permite fazer upload de arquivos para o S3 usando o AWS SDK para PHP. Além disso, também discutimos como recuperar arquivos do S3.

Imagem em miniatura gerada pelo OpenAI DALL-E 2.

  1. Rogerio Barboza 15/04/2024, 09:39

    Muito obrigado!

    Reply

Deixe uma resposta