O aws/aws-sdk-php é o SDK oficial da Amazon para trabalhar com o serviço S3 em PHP. Ele permite realizar operações básicas com objetos no S3, incluindo enviar e baixar arquivos, excluir objetos, listar o conteúdo de buckets e gerar URLs pré-assinadas.
Instale a biblioteca usando o Composer:
composer require aws/aws-sdk-php
Após a instalação, a biblioteca ficará localizada no diretório vendor. Para utilizá-la, inclua o autoloader:
require 'vendor/autoload.php';
O SDK requer que a extensão ext-xml do PHP esteja instalada.
Verifique se a extensão está disponível:
php -m | grep xml
Se a extensão não estiver instalada, use o gerenciador de pacotes:
Debian / Ubuntu:
sudo apt install php-xml
Alpine:
apk add php8-xml
RHEL / CentOS:
sudo yum install php-xml
As credenciais de acesso podem ser configuradas de várias formas.
Ao usar a AWS CLI, um diretório .aws com arquivos de configuração é criado automaticamente no diretório home do usuário. Se necessário, você pode criar esse diretório e os arquivos manualmente, sem instalar a AWS CLI.
O arquivo ~/.aws/credentials deve conter:
[default]
aws_access_key_id = <ACCESS_KEY>
aws_secret_access_key = <SECRET_KEY>
E o ~/.aws/config:
[default]
output = json
endpoint_url = https://s3.hmstorage.net
region = us-2
Você também pode fornecer credenciais por meio de variáveis de ambiente:
export AWS_ACCESS_KEY_ID=<ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<SECRET_KEY>
Nesse caso, você pode usar o SDK sem configuração adicional:
$s3 = new Aws\S3\S3Client([
'region' => 'us-2',
'version' => 'latest',
'endpoint' => 'https://s3.hmstorage.net',
]);
As credenciais podem ser fornecidas explicitamente ao criar o cliente:
<code here>
Se houver múltiplos perfis configurados em ~/.aws/credentials, você pode especificar o perfil necessário:
$s3 = new S3Client([
'profile' => 'myprofile',
'region' => 'us-2',
'version' => 'latest',
'endpoint' => 'https://s3.hmstorage.net',
]);
O exemplo abaixo demonstra operações básicas com objetos:
Antes de executar o script, crie um arquivo chamado example.txt no mesmo diretório do script.
Código de exemplo:
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
$bucket = 'bucket_name';
$key = 'example.txt';
$localUpload = 'example.txt';
$localDownload = 'downloaded_example.txt';
$s3 = new S3Client([
'region' => 'us-2',
'version' => 'latest',
'endpoint' => 'https://s3.hmstorage.net',
'credentials' => [
'key' => '<ACCESS_KEY>',
'secret' => '<SECRET_KEY>',
],
]);
try {
// 1. Enviar arquivo para o bucket
if (file_exists($localUpload)) {
echo "Uploading file $localUpload...\n";
$s3->putObject([
'Bucket' => $bucket,
'Key' => $key,
'SourceFile' => $localUpload,
]);
echo "Upload completed.\n";
} else {
echo "File $localUpload not found. Skipping upload.\n";
}
// 2. Listar objetos
echo "\nBucket contents:\n";
$result = $s3->listObjectsV2([
'Bucket' => $bucket,
]);
if (!empty($result['Contents'])) {
foreach ($result['Contents'] as $object) {
echo "- {$object['Key']}\n";
}
} else {
echo "(Bucket is empty)\n";
}
// 3. Baixar arquivo
echo "\nDownloading $key to $localDownload...\n";
$s3->getObject([
'Bucket' => $bucket,
'Key' => $key,
'SaveAs' => $localDownload,
]);
echo "Download completed.\n";
// 4. Excluir arquivo
echo "\nDeleting $key from the bucket...\n";
$s3->deleteObject([
'Bucket' => $bucket,
'Key' => $key,
]);
echo "Deletion completed.\n";
} catch (AwsException $e) {
echo "Error: {$e->getMessage()}\n";
}