Programarea cu Yii2 Utilizarea Amazon S3

Ce veți crea

Dacă vă întrebați: "Ce este Yii?" verificați tutorialul meu anterior, Introducere în Cadrul Yii, care analizează beneficiile Yii și include o prezentare generală a ceea ce este nou în Yii 2.0, lansat în octombrie 2014.

În această programare cu seria Yii2, ghid direct cititorii în folosirea cadrului Yii2 pentru PHP. În tutorialul de astăzi, vă voi prezenta prin elementele de bază ale navigării, încărcării și descărcării de fișiere către și de la serviciul de stocare S3 al companiei Amazon. În esență, am creat un model simplu de stocare și un controler ca exemple pe care le puteți extinde pentru nevoile dvs..

Doar un memento, eu particip la comentariile de mai jos. Sunt interesat în special dacă aveți abordări diferite, idei suplimentare sau doriți să sugerați subiecte pentru tutoriale viitoare. Dacă aveți o sugestie de întrebare sau subiect, vă rugăm să postați mai jos. Puteți să mă contactați și pe Twitter @reifman direct.

Ce este Amazon S3?

Amazon S3 oferă un spațiu de stocare avansat, bazat pe nor pentru obiecte și fișiere, ușor de utilizat. Acesta oferă 99,99% disponibilitate și 99,999999999% durabilitate a obiectelor.

Acesta oferă o varietate de caracteristici pentru utilizare simplă sau avansată. Este folosit în mod obișnuit ca componentă de stocare pentru serviciul CDN Amazon CloudFront, dar acestea sunt distincte și pot fi utilizate independent unul de celălalt.

De asemenea, puteți utiliza S3 pentru a migra fișierele în timp, pentru a arhiva în Glacier Amazon, pentru a economisi costuri suplimentare.

La fel ca majoritatea AWS-urilor, operezi S3 prin API-uri, iar astăzi o să te deranjez prin navigarea, încărcarea și descărcarea fișierelor din S3 cu Yii.

Noțiuni de bază

Pentru a rula codul de demonstrație, veți avea nevoie de propriul cont AWS Amazon și chei de acces. Puteți parcurge arborele dvs. S3 din consola AWS prezentată mai jos:

S3 constă din găleți care conțin numeroase directoare și fișiere în interiorul lor. De când am folosit AWS ca CDN, copacul meu WordPress rămâne în vechea mea găleată. Puteți să răsfoiți și galeta dvs.:

Pe măsură ce traversez pomul de obiecte, iată o vedere mai profundă a conținutului găleții mele:

Programare cu S3

Din nou, voi construi arborele de salut de la GitHub pentru codul nostru de demonstrație (vezi link-ul de pe această pagină). Este derivat din Yii2 de bază.

Obținerea cheilor de acces

Veți avea nevoie de chei de acces pentru API-ul AWS S3 dacă nu le aveți deja. Dacă nu, puteți să le obțineți prin navigarea către Confidențialitatea de securitate și crearea unei noi perechi:

Pentru demonstrația noastră de cod, va trebui să le plasați în fișierul dvs. hello.ini cu alte chei și coduri securizate:

$ more /var/secure/hello.ini mysql_host = "localhost" mysql_db = "salut" mysql_un = "tom_mcfarlin" mysql_pwd = "is-never-gonna-give-up-rick-astley" aws_s3_access = "AXXXXXXXXXXXXXXXXXXXXXXXXXXXA" aws_s3_secret = nxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXb "aws_s3_region =" us-east-1 "

Instalarea extensiei Yii pentru AWS

Pentru acest tutorial, vom folosi extensia AWS a lui Federico Motta pentru Yii2. Este cu siguranta cel mai tanar programator Yii al carui cod le-am folosit pentru un tutorial Envato Tuts +:

Nu este uimitor cât de repede se îmbarcă copiii programarea în aceste zile?

Iată procesul de instalare utilizând compozitorul:

$ compozitor necesita fedemotta / yii2-aws-sdk Folosind versiunea ^ 2.0 pentru fedemotta / yii2-aws-sdk ./composer.json a fost actualizată Încărcarea depozitelor compozitorului cu informații despre pachete Actualizarea dependențelor (inclusiv necesitatea dev) ... - Instalarea aws / aws -sdk-php (3.18.27) Descărcarea: 100% - Instalarea fedemotta / yii2-aws-sdk (v2.0) Încărcarea din cache aws / aws-sdk-php sugerează instalarea aws / aws-php-sns-message- validator (Pentru a valida notificările SNS primite) aws / aws-sdk-php sugerează instalarea doctrinei / cache-ului (Pentru a utiliza DoctrineCacheAdapter) Fișier de blocare de scriere Generarea fișierelor autoload

Ulterior, am instalat și cele două biblioteci pe care le sugerează, dar nu a instalat toate nivelurile de sugestii pentru mașina mea de dezvoltare locală:

$ compozitor necesită aws / aws-php-sns-message-validator Utilizarea versiunii ^ 1.1 pentru aws / aws-php-sns-message- validator ./composer.json a fost actualizată Încărcarea depozitelor compozitorului cu informații despre pachete Actualizarea dependențelor dev) - Instalarea aws / php-sns-message-validator (1.1.0) Încărcarea din cache Scrierea fișierului de blocare Generarea fișierelor autoload $ compozitorul necesită cache / adaptor doctrină Utilizând versiunea ^ 0.5.0 pentru cache / /composer.json a fost actualizată Încărcarea depoziturilor de compozitori cu informații despre pachete Actualizarea dependențelor (inclusiv necesitatea dev) - Instalarea doctrinei / cache-ului (v1.6.0) Încărcarea din cache - Instalarea domeniului psr / cache (1.0.0) / taggable-cache (0.4.0) Încărcare din cache - Instalarea domeniului psr / log (1.0.0) Încărcare din cache - Instalarea cache / adaptor-common (0.3.2) 0) Încărcarea din cache-ul cache / doctrină-adaptor sugerează instalarea ext-apc (Permite cache cu Apc) cache / doctrine-adapter sugerează instalarea ext-memcache (Permite cache cu Memcache) cache / doctrine-adapter sugerează instalarea ext-memcached (Permite cache cu Memcached) cache / doctrine-adapter sugerează instalarea ext-redis cu Redis) Fișier de blocare de scriere Generarea fișierelor autoload

De asemenea, am înregistrat awssdk componentă în hello / config / web.php:

'components' => ['awssdk' => ['class' => 'fedemotta \ awssdk \ AwsSdk', 'credentials' => [$ config [ 'aws_s3_access'], 'secret' => $ config ['aws_s3_secret']], 'region' => $ config ['aws_s3_region'], // ie: 'us-east-1' ', // ie:' latest '], 

Navigarea pe My S3 Directories

Pentru demonstrația de astăzi, am creat un hello / controllers / StorageController.php cu metode de acțiune pentru a rula fiecare exemplu, cum ar fi http: // localhost: 8888 / hello / storage / browse pentru a căuta directoare. 

Aceste metode numesc, la rândul lor, modelul Storage.php pe care l-am creat cu propriile lor metode.

Iată codul de control:

funcția publică funcțiaBrowse () $ s = new Storage (); $ S> naviga ( 'jeff-reifman-wp', "manual"); 

Solicită ca modelul Storage să ajungă până la norii din "S3ky" și să navigheze în directorul manual.

De fiecare dată când modelul Storage.php este instanțiat, acesta încarcă extensia SDK AWS și creează o instanță S3:

aws = Yii :: $ app-> awssdk-> getAwsSdk (); $ acest-> s3 = $ acest-> aws-> createS3 (); 

În exemplul meu de navigare, eu sunt doar ecou directoare și fișiere, dar vă puteți simți liber să personalizați acest cod ca ai nevoie:

($ bucket, prefix = $ prefix)) -> toArray () () ; ($ r) 'if_array ($ r)) if (array_key_exists (' statusCode ', $ r)) echo' Effective URL:
„; altceva foreach ($ r ca element $) echo $ item ['Key']. '
„; altceva echo $ r. '
„;

Iată rezultatele când răsfoiesc http: // localhost: 8888 / hello / storage / browse:

Încărcarea fișierelor

Pentru a încărca un fișier, trebuie să specificați calea locală și cheia destinației la distanță. Iată codul de control al încărcării:

funcția publică funcțiaUpload () $ bucket = 'jeff-reifman-wp'; $ keyname = '/manual/upload.txt'; $ filepath = '/ Utilizatori / Jeff / Sites / hello / upload.txt'; $ s = depozitare nouă (); $ result = $ s-> încărcați ($ bucket, $ keyname, $ filepath); echo $ result ['ObjectURL']; 

Iată metoda de stocare:

($ bucket, $ keyname, $ filepath) $ rezultat = $ this-> s3-> putObject (array ('Bucket' => $ bucket, 'Key' => $ keyname, 'SourceFile' => $ fișierul "ContentType" => 'text / simplu', 'ACL' => 'citit public', 'StorageClass' => 'REDUCED_REDUNDANCY', 'Metadata' => 'param2' => 'valoarea 2'))); returneaza rezultatul $;

Navigarea la http: // localhost: 8888 / hello / storage / upload afișează adresa URL de retur din care pot vizualiza fișierul încărcat, pentru că am specificat public-citireîn codul meu de mai sus:

La rândul său, navigarea la adresa S3 de mai sus arată conținutul fișierului încărcat:

Acesta este un test de încărcat în S3

Descărcarea fișierelor

Iată codul de controler pentru descărcarea unui fișier:

funcția publică funcțiaDescărcare () $ s = new Storage (); $ f = $ s-> descărca ('jeff-reifman-wp', 'fișiere / 2013/01 / i103-wedding-cover.jpg'); // descărcați antetul fișierului ('Content-Type:'. $ f ['ContentType']); echo $ f ['Corp']; 

Deoarece browserul răspunde la tipul de conținut, acesta ar trebui să afișeze imaginea corespunzătoare, pe care o cer aici.

Notă: Încerc să descarcă o imagine de copertă din experiența mea căsătorită cu o corporație numită Persoană corporativă unei femei (da, sa întâmplat de fapt). Căsătoria nu a funcționat pe termen lung.

Iată codul de stocare pentru descărcare:

descărcarea funcției publice ($ bucket = ", $ key =") // obțineți ultimul obiect din s3 // $ object = end ($ result ['Contents']); // $ key = $ object ['Cheie']; $ file = $ acest-> s3-> getObject (['Bucket' => $ bucket, 'Key' => cheie cheie,]); returnați fișierul $; // salvați-l pe disc

Iată ce vedeți atunci când fișierul este difuzat în browser - adică mireasa care sărbătorește prin fluturarea licenței de căsătorie cu Persoana corporatistă (zâmbesc în fundal, misiunea sa realizat).

Desigur, ați putea stoca la fel de ușor rezultatele pe serverul dvs. într-un fișier. Depinde de tine. Vă încurajez să jucați cu codul și să îl personalizați după cum doriți.

Ce urmeaza?

Sper că acest lucru vă ajută cu elementele de bază ale utilizării AWS S3 din aplicația Yii. 

Dacă vă place conceptul de obiect de stocare pe bază de obiecte și de stocare a fișierelor, dar doriți să găsiți alți furnizori, consultați Alternative to Amazon AWS. M-am retras treptat de la AWS din mai multe motive menționate în articol. Una dintre următoarele sarcini este să migrez obiectele mele S3 care sunt încă parțial utilizate pe propriul meu server, pe care le pot oglinda cu KeyCDN.

Urmăriți tutorialele viitoare în programul nostru de programare cu seria Yii2 în timp ce continuăm să vă scufundăm în diferite aspecte ale cadrului. Ați putea dori, de asemenea, să verificați construirea seriei dvs. de pornire cu seria PHP care utilizează șablonul avansat al lui Yii2, pe măsură ce construim o aplicație în lumea reală. Aplicația Planificator de întâlniri din seria de pornire este acum pregătită pentru utilizare și este construită în Yii.

Dacă doriți să știți când vine următorul tutorial Yii2, urmați-mă @reifman pe Twitter sau verificați pagina de instructor. 

Link-uri conexe

  • Documentație Amazon Simple Storage Service
  • Alternative la Amazon AWS (Envato Tuts +)
  • Yii2 Developer Exchange, site-ul meu de resurse Yii2
  • Încărcarea fișierelor - Ghidul definitiv pentru Yii 2.0
Cod