Então você tem uma aplicação da web, site ou jogo com um back-end em PHP.
Um dos seus casos de uso é salvar arquivos em disco. Você provavelmente deve usar um serviço de armazenamento em vez de salvar e servir arquivos do seu servidor.
Obviamente, se você pesquisar um pouco, vai encontrar o Amazon Web Services Simple Storage ou no AWS S3.
O preço é bom, a empresa é sólida e fácil de configurar por meio do console do aplicativo.
Mas agora, como você vincula isso ao seu back-end PHP?
Você encontra este SDK bonito, completo e enorme, fornecido pela Amazon: https://github.com/aws/aws-sdk-php.
Espere um pouco, você precisa instalar o mundo para simplesmente enviar um arquivo ao S3?

Passo 1 – Copie o arquivo
Basta copiar o S3.php no seu repositório. Bem, na verdade, a versão no repo de Donovan está desatualizada e não usa o algoritmo certo para assinar solicitações. Felizmente, o Rack Lin fez uma solicitação de recebimento com a alteração correta. No entanto, ele não foi mesclado (o Donavan não tem tempo para manter o repo). Rack Lin teve a gentileza de manter o garfo. Então copie o S3.php do seu repositório: https://github.com/racklin/amazon-s3-php-class.
Passo 2 – Credenciais para a AWS
Crie um arquivo php com as credenciais necessárias, juntamente com a sua região e o nome do bucket. Aqui está uma maneira simples de fazer isso.
if (ENVIRONMENT == 'production')
{
define('AWS_S3_KEY', 'XXXX');
define('AWS_S3_SECRET', 'XXXX');
define('AWS_S3_REGION', 'us-east-2');
define('AWS_S3_BUCKET', 'bucket');
define('AWS_S3_URL', 'http://s3.'.AWS_S3_REGION.'.amazonaws.com/'.AWS_S3_BUCKET.'/');
}
Passo 3 – O código a ser enviado à AWS
Salvar na AWS é muito simples. Donavan forneceu métodos estáticos simples para permitir isso. No caso de a AWS não estar disponível (ou seja, ambiente de desenvolvimento), recorro ao salvamento em um arquivo
$tmpfile = $_FILES['file']['tmp_name'];
$file = $_FILES['file']['name'];
if (defined('AWS_S3_URL'))
{
// Persist to AWS S3 and delete uploaded file require_once('S3.php');
S3::setAuth(AWS_S3_KEY, AWS_S3_SECRET);
S3::setRegion(AWS_S3_REGION);
S3::setSignatureVersion('v4');
S3::putObject(S3::inputFile($tmpfile), AWS_S3_BUCKET, 'path/in/bucket/'.$file, S3::ACL_PUBLIC_READ);
unlink($tmpfile);
}
else
{
// Persist to disk $path = 'path/to/user/files/'.$file;
move_uploaded_file($tmpfile, $path);
}
Então é isso. Simples assim.
