Arbeit mit S3 und Cloud-Speichern in PHP
\n\nCloud-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\nGrundlegende Konzepte von S3
\n\nBevor 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
Installation des AWS SDK für PHP
\n\nDie offizielle Bibliothek für die Arbeit mit S3 ist aws/aws-sdk-php. Installation über Composer:
composer require aws/aws-sdk-php\n\nFür die Arbeit mit MinIO oder DigitalOcean Spaces sind keine zusätzlichen Abhängigkeiten erforderlich — das SDK unterstützt benutzerdefinierte Endpoints.
\n\nGrundlegende Konfiguration des S3-Clients
\n\nErstellen 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\nFü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\nBeachten Sie den Parameter use_path_style_endpoint — er ist für MinIO und einige Nicht-AWS-Speicher erforderlich.
Verwaltung von Buckets
\n\nBucket 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\nPrü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\nListe 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\nDateien in S3 hochladen
\n\nHochladen 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: " Auch in der Bibliothek
SMS-Versand mit Go (Golang): Integration mit API-Bibliothek
OAuth-Client für Java: Überblick über Bibliotheken und Codebeispiele
GraphQL-Bibliotheken für Kotlin: Vollständiger Überblick für Backend-Entwickler
Maschinelles Lernen mit Rust: Überblick über Bibliotheken für Data Science