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.