Trabajo con S3 y almacenamiento en la nube en PHP: AWS SDK para PHP
Las aplicaciones web modernas utilizan cada vez más el almacenamiento en la nube para guardar archivos, imágenes, copias de seguridad y otro contenido. Amazon S3 (Simple Storage Service) es uno de los servicios de almacenamiento de objetos más populares, que proporciona un almacenamiento escalable, seguro y de alto rendimiento. En este artículo, veremos cómo trabajar con S3 y el almacenamiento en la nube en PHP utilizando el AWS SDK oficial para PHP.
¿Qué es AWS SDK para PHP?
AWS SDK para PHP es la biblioteca oficial de Amazon que permite interactuar con los servicios de AWS, incluido S3, desde aplicaciones PHP. Proporciona una interfaz orientada a objetos conveniente, gestión automática de firmas de solicitudes, manejo de errores y soporte para todas las versiones modernas de PHP (7.2+).
Instalación de AWS SDK
La instalación se realiza a través de Composer. Ejecute el comando en la raíz de su proyecto:
composer require aws/aws-sdk-phpDespués de la instalación, incluya la carga automática de Composer en su archivo PHP:
require 'vendor/autoload.php';Configuración de la conexión a S3
Para trabajar con S3, necesitará un Access Key ID y un Secret Access Key, que puede obtener en la consola de AWS IAM. También debe especificar la región de su bucket (por ejemplo, us-east-1 o eu-central-1).
Ejemplo de configuración básica del cliente S3:
use Aws\\S3\\S3Client;
$s3Client = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1', 'credentials' => [ 'key' => 'TU_ACCESS_KEY', 'secret' => 'TU_SECRET_KEY', ],]);Para producción, se recomienda usar variables de entorno o archivos de configuración de AWS para no almacenar las claves en el código:
putenv('AWS_ACCESS_KEY_ID=TU_ACCESS_KEY');putenv('AWS_SECRET_ACCESS_KEY=TU_SECRET_KEY');putenv('AWS_DEFAULT_REGION=us-east-1');Operaciones principales con S3 en PHP
1. Creación de un bucket
Un bucket es un contenedor para sus objetos (archivos). El nombre del bucket debe ser globalmente único:
try { $result = $s3Client->createBucket([ 'Bucket' => 'my-unique-bucket-name', ]); echo "Bucket creado: " . $result['Location'];} catch (Aws\\Exception\\AwsException $e) { echo "Error: " . $e->getMessage();}2. Carga de archivo (PutObject)
Carga de un archivo desde el sistema de archivos local a S3:
try { $result = $s3Client->putObject([ 'Bucket' => 'my-unique-bucket-name', 'Key' => 'images/photo.jpg', // ruta al objeto en el bucket 'SourceFile' => '/local/path/to/photo.jpg', // archivo local 'ACL' => 'public-read', // permisos de acceso ]); echo "Archivo cargado. URL: " . $result['ObjectURL'];} catch (Aws\\Exception\\AwsException $e) { echo "Error de carga: " . $e->getMessage();}También puede cargar datos directamente desde una cadena usando el parámetro Body:
$result = $s3Client->putObject([ 'Bucket' => 'my-unique-bucket-name', 'Key' => 'data.txt', 'Body' => 'Contenido del archivo',]);3. Descarga de archivo (GetObject)
Puede descargar un archivo de S3 a un archivo o a una variable:
// A un archivo$result = $s3Client->getObject([ 'Bucket' => 'my-unique-bucket-name', 'Key' => 'images/photo.jpg', 'SaveAs' => '/local/path/to/downloaded_photo.jpg',]);
// A una variable$result = $s3Client->getObject([ 'Bucket' => 'my-unique-bucket-name', 'Key' => 'data.txt',]);$content = $result['Body']->getContents();echo $content;4. Eliminación de archivo (DeleteObject)
try { $ También en la biblioteca
Configuración de aplicaciones Java: bibliotecas y herramientas para la gestión de ajustes
ORM para Rust: comparación y ejemplos de uso de Diesel, SeaORM y SQLx