Travailler avec S3 et les stockages cloud en PHP : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec S3 et les stockages cloud en PHP

\n\n

Les stockages d'objets cloud compatibles avec le protocole Amazon S3 (Simple Storage Service) sont devenus la norme de facto pour stocker des fichiers, des images, des sauvegardes et du contenu statique. PHP fournit des outils puissants pour l'intégration avec des stockages tels que AWS S3, MinIO (auto-hébergé), DigitalOcean Spaces, Wasabi, Yandex Object Storage et d'autres. Dans cet article, nous allons voir en détail comment travailler avec les stockages compatibles S3 en PHP, en utilisant le SDK AWS officiel et des bibliothèques alternatives.

\n\n

Concepts de base de S3

\n\n

Avant de passer au code, il est important de comprendre les concepts clés de S3 :

\n
    \n
  • Bucket — conteneur pour les objets (fichiers). Le nom du bucket doit être globalement unique (pour les clouds publics).
  • \n
  • Objet — fichier et ses métadonnées. Chaque objet a une clé (Key) — le chemin du fichier à l'intérieur du bucket.
  • \n
  • Région — emplacement géographique du stockage.
  • \n
  • Credentials — clé d'accès (Access Key ID) et clé secrète (Secret Access Key) pour l'authentification.
  • \n
  • Endpoint — URL du stockage (pour les services compatibles S3 autres qu'AWS, l'endpoint est obligatoire).
  • \n
\n\n

Installation du SDK AWS pour PHP

\n\n

La bibliothèque officielle pour travailler avec S3 est aws/aws-sdk-php. Installation via Composer :

\n\n
composer require aws/aws-sdk-php
\n\n

Pour travailler avec MinIO ou DigitalOcean Spaces, aucune dépendance supplémentaire n'est nécessaire — le SDK prend en charge les endpoints personnalisés.

\n\n

Configuration de base du client S3

\n\n

Créons un client pour se connecter à AWS S3 :

\n\n
<?php\nrequire 'vendor/autoload.php';\n\nuse Aws\\S3\\S3Client;\nuse Aws\\Exception\\AwsException;\n\n$s3Client = new S3Client([\n    'version'     => 'latest',\n    'region'      => 'us-east-1',\n    'credentials' => [\n        'key'    => 'YOUR_ACCESS_KEY',\n        'secret' => 'YOUR_SECRET_KEY',\n    ],\n]);\n?>
\n\n

Pour MinIO (stockage local compatible S3), la configuration ressemblera à ceci :

\n\n
<?php\n$s3Client = new S3Client([\n    'version'     => 'latest',\n    'region'      => 'us-east-1', // MinIO ignore la région\n    'endpoint'    => 'http://localhost:9000',\n    'use_path_style_endpoint' => true,\n    'credentials' => [\n        'key'    => 'minioadmin',\n        'secret' => 'minioadmin',\n    ],\n]);\n?>
\n\n

Notez le paramètre use_path_style_endpoint — il est nécessaire pour MinIO et certains stockages non-AWS.

\n\n

Gestion des buckets

\n\n

Création d'un bucket

\n\n
<?php\ntry {\n    $result = $s3Client->createBucket([\n        'Bucket' => 'my-php-bucket',\n    ]);\n    echo "Bucket créé : " . $result['Location'];\n} catch (AwsException $e) {\n    echo "Erreur : " . $e->getMessage();\n}\n?>
\n\n

Vérification de l'existence d'un bucket

\n\n
<?php\n$exists = $s3Client->doesBucketExist('my-php-bucket');\nif ($exists) {\n    echo "Le bucket existe";\n} else {\n    echo "Bucket non trouvé";\n}\n?>
\n\n

Liste de tous les buckets

\n\n
<?php\n$buckets = $s3Client->listBuckets();\nforeach ($buckets['Buckets'] as $bucket) {\n    echo $bucket['Name'] . " (créé le : " . $bucket['CreationDate'] . ")<br>";\n}\n?>
\n\n

Téléversement de fichiers vers S3

\n\n

Téléversement depuis une chaîne (données textuelles)

\n\n
<?php\ntry {\n    $result = $s3Client->putObject([\n        'Bucket' => 'my-php-bucket',\n        'Key'    => 'hello.txt',\n        'Body'   => 'Bonjour, S3 depuis PHP !',\n    ]);\n    echo "Fichier téléversé. URL : " . $result['ObjectURL'];\n} catch (AwsException $e) {\n    echo "Erreur de téléversement : "                    

Recommendations