Arbeit mit S3 und Cloud-Speichern in PHP: Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit S3 und Cloud-Speichern in PHP

\n\n

Cloud-Objektspeicher, die mit dem Amazon S3-Protokoll (Simple Storage Service) kompatibel sind, sind zum De-facto-Standard für die Speicherung von Dateien, Bildern, Backups und statischen Inhalten geworden. PHP bietet leistungsstarke Werkzeuge für die Integration mit solchen Speichern wie AWS S3, MinIO (self-hosted), DigitalOcean Spaces, Wasabi, Yandex Object Storage und anderen. In diesem Artikel werden wir im Detail betrachten, wie man mit S3-kompatiblen Speichern in PHP arbeitet, unter Verwendung des offiziellen AWS SDK und alternativer Bibliotheken.

\n\n

Grundlegende Konzepte von S3

\n\n

Bevor wir zum Code übergehen, ist es wichtig, die Schlüsselkonzepte von S3 zu verstehen:

\n
    \n
  • Bucket — ein Container für Objekte (Dateien). Der Bucket-Name muss global eindeutig sein (für öffentliche Clouds).
  • \n
  • Objekt (Object) — eine Datei und ihre Metadaten. Jedes Objekt hat einen Schlüssel (Key) — den Pfad zur Datei innerhalb des Buckets.
  • \n
  • Region — der geografische Standort des Speichers.
  • \n
  • Credentials — Zugriffsschlüssel (Access Key ID) und geheimer Schlüssel (Secret Access Key) für die Authentifizierung.
  • \n
  • Endpoint — die URL des Speichers (für S3-kompatible Dienste, die nicht AWS sind, ist der Endpoint erforderlich).
  • \n
\n\n

Installation des AWS SDK für PHP

\n\n

Die offizielle Bibliothek für die Arbeit mit S3 ist aws/aws-sdk-php. Installation über Composer:

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

Für die Arbeit mit MinIO oder DigitalOcean Spaces sind keine zusätzlichen Abhängigkeiten erforderlich — das SDK unterstützt benutzerdefinierte Endpoints.

\n\n

Grundlegende Konfiguration des S3-Clients

\n\n

Erstellen wir einen Client für die Verbindung zu 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

Für MinIO (lokaler S3-kompatibler Speicher) sieht die Konfiguration wie folgt aus:

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

Beachten Sie den Parameter use_path_style_endpoint — er ist für MinIO und einige Nicht-AWS-Speicher erforderlich.

\n\n

Verwaltung von Buckets

\n\n

Bucket erstellen

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

Prüfen, ob ein Bucket existiert

\n\n
<?php\n$exists = $s3Client->doesBucketExist('my-php-bucket');\nif ($exists) {\n    echo "Bucket existiert";\n} else {\n    echo "Bucket nicht gefunden";\n}\n?>
\n\n

Liste aller Buckets

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

Dateien in S3 hochladen

\n\n

Hochladen aus einem String (Textdaten)

\n\n
<?php\ntry {\n    $result = $s3Client->putObject([\n        'Bucket' => 'my-php-bucket',\n        'Key'    => 'hello.txt',\n        'Body'   => 'Hello, S3 from PHP!',\n    ]);\n    echo "Datei hochgeladen. URL: " . $result['ObjectURL'];\n} catch (AwsException $e) {\n    echo "Fehler beim Hochladen: "                    

Empfehlungen