Wenn Sie fragen: "Was ist Yii?" Schauen Sie sich mein früheres Tutorial an, Einführung in das Yii-Framework, Hier werden die Vorteile von Yii beschrieben und ein Überblick über die Neuerungen in Yii 2.0 (Oktober 2014) gegeben.
In dieser Programmierserie mit Yii2 leite ich die Leser beim Einsatz des Yii2-Frameworks für PHP. Im heutigen Tutorial werde ich Sie durch die Grundlagen des Browsens, Hochladens und Herunterladens von Dateien zum und vom Cloud-basierten S3-Speicherdienst von Amazon führen. Im Wesentlichen habe ich ein einfaches Speichermodell und einen Controller als Beispiele erstellt, die Sie für Ihre Anforderungen erweitern können.
Nur zur Erinnerung, ich beteilige mich an den Kommentarthreads unten. Ich bin besonders interessiert, wenn Sie unterschiedliche Ansätze, zusätzliche Ideen haben oder Themen für zukünftige Tutorials vorschlagen möchten. Wenn Sie eine Frage oder ein Thema haben, schreiben Sie bitte unten. Sie können mich auch direkt auf Twitter @reifman erreichen.
Amazon S3 bietet benutzerfreundliche, erweiterte Cloud-basierte Speicherung von Objekten und Dateien. Es bietet eine Verfügbarkeit von 99,99% und eine Haltbarkeit von 99,999999999%.
Es bietet eine Vielzahl von Funktionen für den einfachen oder fortgeschrittenen Gebrauch. Sie wird im Allgemeinen als Speicherkomponente für Amazon CDN-Service CloudFront verwendet. Diese sind jedoch unterschiedlich und können unabhängig voneinander verwendet werden.
Sie können S3 auch verwenden, um Dateien im Laufe der Zeit zu migrieren und in Amazon Glacier zu archivieren, um zusätzliche Kosten zu sparen.
Wie die meisten AWS betreiben Sie S3 über APIs. Heute werde ich Sie durch das Browsen, Hochladen und Herunterladen von Dateien von S3 mit Yii führen.
Um den Demonstrationscode auszuführen, benötigen Sie ein eigenes Amazon AWS-Konto und Zugangsschlüssel. Sie können Ihren S3-Baum über die unten dargestellte AWS-Konsole durchsuchen:
S3 besteht aus Buckets, die zahlreiche Verzeichnisse und Dateien enthalten. Seit ich AWS als CDN verwendet habe, verbleibt mein WordPress-Baum in meinem alten Eimer. Sie können auch Ihren Eimer durchsuchen:
Während ich den Baum der Objekte durchquere, sehen Sie hier einen tieferen Blick auf den Inhalt meines Eimers:
Ich werde noch einmal auf den Hallo-Baum von GitHub aufbauen, um unseren Demo-Code zu erhalten (siehe den Link auf dieser Seite.) Er ist von Yii2 basic abgeleitet.
Sie benötigen Zugriffsschlüssel für die AWS S3-API, wenn Sie sie noch nicht haben. Wenn nicht, können Sie sie abrufen, indem Sie zu Sicherheitsanmeldeinformationen navigieren und ein neues Paar erstellen:
Für unsere Code-Demonstration müssen Sie sie mit anderen sicheren Schlüsseln und Codes in Ihrer hello.ini-Datei platzieren:
$ more /var/secure/hail.ini mysql_host = "localhost" mysql_db = "hallo" mysql_un = "tom_mcfarlin" mysql_pwd = "ist-niemals-gonna-give-up-rick-astley" nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXb "aws_s3_region =" us-east-1 "
In diesem Lernprogramm verwenden wir die AWS-Erweiterung von Federico Motta für Yii2. Er ist definitiv der jüngste Yii-Programmierer, dessen Code ich für ein Envato Tuts + -Tutorial verwendet habe:
Ist es nicht erstaunlich, wie schnell Kinder heutzutage mit dem Programmieren beginnen??
Hier ist der Installationsprozess mit Composer:
$ composer erfordern fedemotta / yii2-aws-sdk Verwenden von Version ^ 2.0 für fedemotta / yii2-aws-sdk ./composer.json wurde aktualisiert. Composer-Repositorys mit Paketinformationen werden geladen. Abhängigkeiten werden aktualisiert (einschließlich „required-dev“) -sdk-php (3.18.27) Downloading: 100% - Fedemotta / yii2-aws-sdk (v2.0) wird installiert. Beim Laden aus aws / aws-sdk-php wird die Installation von aws / aws-php-sns-message-validator vorgeschlagen (Zur Überprüfung eingehender SNS-Benachrichtigungen) aws / aws-sdk-php schlägt vor, doctrine / cache zu installieren (DoctrineCacheAdapter verwenden). Sperrdatei schreiben. Autoload-Dateien werden erstellt
Anschließend habe ich auch die beiden Bibliotheken installiert, die jedoch vorgeschlagen wurden, aber nicht alle Vorschläge für die nächste Stufe für meinen lokalen Entwicklungscomputer:
$ composer erfordert aws / aws-php-sns-message-validator Version ^ 1.1 für aws / aws-php-sns-message-validator ./composer.json wurde aktualisiert. Composer-Repositorys mit Paketinformationen werden geladen. Abhängigkeiten werden aktualisiert. dev) - Installieren von aws / aws-php-sns-message-validator (1.1.0) Laden aus dem Cache Schreiben der Sperrdatei Erstellen von Autoload-Dateien $ composer erfordert cache / doctrine-adapter Verwenden Sie Version ^ 0.5.0 für cache / doctrine-adapter. /composer.json wurde aktualisiert Laden von Composer-Repositorys mit Paketinformationen Aktualisieren von Abhängigkeiten (einschließlich Required-dev) - Doctrine / Cache installieren (v1.6.0) Laden aus dem Cache - Installieren von PSR / Cache (1.0.0) Laden aus dem Cache - Installieren des Cache / taggable-cache (0.4.0) Laden aus Cache - Installieren von psr / log (1.0.0) Laden aus Cache - Installieren von Cache / Adapter-Common (0.3.2) Laden aus Cache - Installieren von Cache / Doctrine-Adapter (0.5. 0) Beim Laden von Cache / Doctrine-Adapter wird die Installation von ext-apc empfohlen (Ermöglicht das Zwischenspeichern mit Apc) cache / doctrine-adapter empfiehlt die Installation von ext-memcache (Caching mit Memcache möglich). Cache / doctrine-adapter schlägt die Installation von ext-memcached vor (ermöglicht das Caching mit Memcached) mit Redis) Sperrdatei schreiben Autoload-Dateien erzeugen
Ich habe auch die registriert awssdk
Komponente innerhalb von hello / config / web.php:
'components' => ['awssdk' => ['class' => 'fedemotta \ awssdk \ AwsSdk', 'credentials' => [// Sie können eine andere Methode verwenden, um den Zugriff 'key' => $ config [zu gewähren. 'aws_s3_access'], 'secret' => $ config ['aws_s3_secret'],], 'region' => $ config ['aws_s3_region'], // dh: 'us-east-1 "version' => 'latest ', // dh:' neueste '],
Für die heutige Demonstration habe ich ein hallo / controller / StorageController.php mit Aktionsmethoden erstellt, um jedes Beispiel auszuführen, z. B. http: // localhost: 8888 / hello / storage /, um Verzeichnisse zu durchsuchen.
Diese Methoden wiederum rufen das Storage.php-Modell auf, das ich mit ihren eigenen Methoden erstellt habe.
Hier ist der Controller-Code:
öffentliche Funktion actionBrowse () $ s = new Storage (); $ s-> browse ('jeff-reifman-wp', "manual");
Es fordert, dass das Speichermodell bis zu den Wolken in "S3ky" reicht und das manuelle Verzeichnis durchsucht.
Bei jeder Instanziierung des Storage.php-Modells wird die AWS SDK-Erweiterung geladen und eine S3-Instanz erstellt:
aws = Yii :: $ app-> awssdk-> getAwsSdk (); $ this-> s3 = $ this-> aws-> createS3 ();
In meinem Durchsuchungsbeispiel werden die Verzeichnisse und Dateien nur wiederholt, aber Sie können diesen Code nach Bedarf anpassen:
Öffentliche Funktion browse ($ bucket = ", $ prefix =") $ result = $ this-> s3-> listObjects (['Bucket' => $ bucket, "Prefix" => $ prefix]) -> toArray () ; foreach ($ result as $ r) if (is_array ($ r)) if (array_key_exists ('statusCode', $ r)) Echo 'Gültige URL:'. $ r ['effectUri']. '
'; else foreach ($ r als $ item) echo $ item ['Schlüssel']. '
'; else echo $ r. '
';
Hier sind die Ergebnisse, wenn ich zu http: // localhost: 8888 / hello / storage / browse navigiere:
Um eine Datei hochzuladen, müssen Sie den lokalen Pfad und den Remote-Zielschlüssel angeben. Hier ist der Controller-Code zum Hochladen:
öffentliche Funktion actionUpload () $ bucket = 'jeff-reifman-wp'; $ keyname = '/manual/upload.txt'; $ filepath = '/ Benutzer / Jeff / Sites / Hallo / upload.txt'; $ s = neuer Speicher (); $ result = $ s-> upload ($ bucket, $ keyname, $ filepath); echo $ result ['ObjectURL'];
Und hier ist die Speichermodellmethode:
public function upload ($ bucket, $ keyname, $ filepath) $ result = $ this-> s3-> putObject (array ('Bucket' => $ bucket, 'Key' => $ keyname, 'SourceFile' => $.) Dateipfad, 'ContentType' => 'text / plain', 'ACL' => 'public-read', 'StorageClass' => 'REDUCED_REDUNDANCY', 'Metadaten' => Array ('param1' => 'value 1', 'param2' => 'Wert 2'))); $ Ergebnis zurückgeben;
Beim Suchen nach http: // localhost: 8888 / hello / storage / upload wird die zurückgegebene URL angezeigt, von der aus ich die hochgeladene Datei anzeigen kann, da ich sie angegeben habe Öffentlich lesen
in meinem Code oben:
Wenn Sie zur obigen S3-Adresse navigieren, wird der Inhalt der hochgeladenen Datei angezeigt:
Dies ist ein Test zum Hochladen in S3
Hier der Controller-Code zum Herunterladen einer Datei:
öffentliche Funktion actionDownload () $ s = new Storage (); $ f = $ s-> download ('jeff-reifman-wp', 'files / 2013/01 / i103-wedding-cover.jpg'); // den Dateiheader herunterladen ('Content-Type:'. $ f ['ContentType']); echo $ f ['Körper'];
Da der Browser auf den Inhaltstyp reagiert, sollte er das entsprechende Bild anzeigen, das ich hier anfrage.
Hinweis: Ich lade ein Titelbild meiner Erfahrung herunter, als ich eine Frau namens Corporate Person mit einer Frau heiratete (ja, es ist tatsächlich passiert). Die Ehe hat nicht langfristig geklappt.
Hier ist der Speichermodellcode zum Herunterladen:
public function download ($ bucket = ", $ key =") // Holen Sie sich das letzte Objekt von s3 // $ object = end ($ result ['Contents']); // $ key = $ object ['Key']; $ file = $ this-> s3-> getObject (['Bucket' => $ bucket, 'Key' => $ key,]); $ file zurückgeben; // speichere es auf dem Datenträger
Folgendes wird angezeigt, wenn die Datei in den Browser gestreamt wird. Dies ist die Braut, die feiert, indem sie die eigentliche Heiratslizenz an Corporate Person winkt (Ich lächle im Hintergrund, Mission erfüllt)..
Natürlich können Sie die Ergebnisse genauso einfach auf Ihrem Server in einer Datei speichern. Es liegt an dir. Ich ermutige Sie, mit dem Code zu spielen und ihn an Ihre Bedürfnisse anzupassen.
Ich hoffe, dies hilft Ihnen bei der Verwendung von AWS S3 in Ihrer Yii-Anwendung.
Wenn Sie das Konzept der Cloud-basierten Objekt- und Dateispeicherung mögen, aber andere Anbieter suchen möchten, lesen Sie Alternativen zu Amazon AWS. Ich habe mich aus einer Reihe von Gründen, die in dem Artikel erwähnt werden, allmählich von AWS entfernt. Eine meiner nächsten Aufgaben besteht darin, meine noch teilweise verwendeten S3-Objekte auf meinen eigenen Server zu migrieren, den ich mit KeyCDN spiegeln kann.
Achten Sie auf kommende Tutorials in unserer Programmierserie "Programmieren mit Yii2", während wir weiter in verschiedene Aspekte des Frameworks eintauchen. Vielleicht möchten Sie auch unsere Building Your Startup With PHP-Serie kennenlernen, die die erweiterte Vorlage von Yii2 verwendet, während wir eine reale Anwendung erstellen. Die Meeting Planner-Anwendung der Startserie ist jetzt einsatzbereit und wird in Yii erstellt.
Wenn Sie wissen möchten, wann das nächste Yii2-Tutorial ankommt, folgen Sie mir @reifman auf Twitter oder besuchen Sie meine Instructor-Seite.