Om du frågar, "Vad är Yii?" kolla in min tidigare handledning, Introduktion till Yii Framework, som granskar fördelarna med Yii och innehåller en översikt över vad som är nytt i Yii 2.0, släppt i oktober 2014.
I denna programmering med Yii2-serien guidar jag läsare som använder Yii2 Framework for PHP. I dagens handledning går jag igenom grunderna för att surfa, ladda upp och ladda ner filer till och från Amazons molnbaserade S3-lagringstjänst. I huvudsak har jag skapat en enkel lagringsmodell och kontroller som exempel som du kan utöka för dina behov.
Bara en påminnelse, jag deltar i kommentera trådarna nedan. Jag är särskilt intresserad om du har olika tillvägagångssätt, ytterligare idéer, eller vill föreslå ämnen för framtida handledning. Om du har en fråga eller ett ämne förslag, vänligen posta nedan. Du kan också nå mig på Twitter @ reifman direkt.
Amazon S3 ger enkel att använda, avancerat molnbaserat lagringsutrymme för objekt och filer. Det erbjuder 99,99% tillgänglighet och 99,999999999% hållbarhet av objekt.
Det erbjuder en mängd olika funktioner för enkel eller avancerad användning. Den används ofta som lagringskomponent för Amazons CDN-tjänst CloudFront, men dessa är tydliga och kan användas oberoende av varandra.
Du kan också använda S3 för att migrera filer över tiden för att arkivera i Amazon Glacier, för extra kostnadsbesparingar.
Liksom de flesta alla AWS, använder du S3 via API, och idag går jag igenom dig genom att surfa, ladda upp och ladda ner filer från S3 med Yii.
För att köra demonstrationskoden behöver du ditt eget Amazon AWS-konto och åtkomstnycklar. Du kan bläddra i ditt S3-träd från AWS-konsolen som visas nedan:
S3 består av hinkar som innehåller många kataloger och filer inom dem. Eftersom jag brukade använda AWS som en CDN, är mitt WordPress-träd kvar i min gamla hink. Du kan också bläddra i din hink:
När jag går över föremålens träd ser du en djupare bild av mina hinkar innehåll:
Återigen bygger jag på hejträdet från GitHub för vår demonstrationskod (se länken på den här sidan.) Den härletas från Yii2 basic.
Du behöver åtkomstnycklar för AWS S3 API om du inte redan har dem. Om inte kan du få dem genom att surfa till Security Credentials och skapa ett nytt par:
För vår koddemonstration måste du placera dem i din hello.ini-fil med andra säkra nycklar och koder:
$ my / nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXB "aws_s3_region =" us-east-1 "
För denna handledning använder vi Federico Motta AWS-förlängning för Yii2. Han är definitivt den yngsta Yii programmeraren vars kod jag har använt för Envato Tuts + handledning:
Är det inte fantastiskt hur snabbt barnen plockar upp programmering dessa dagar?
Här är installationsprocessen med kompositör:
$ komponent kräver fedemotta / yii2-aws-sdk Använda version ^ 2.0 för fedemotta / yii2-aws-sdk ./composer.json har uppdaterats Laddar kompositregister med paketinformation Uppdatering av beroenden (inklusive krav-dev) ... - Installera aws / aws -dk-php (3.18.27) Nedladdning: 100% - Installera fedemotta / yii2-aws-sdk (v2.0) Laddar från cache aws / aws-sdk-php föreslår att du installerar aws / aws-php-sns-message-validator (För att validera inkommande SNS-meddelanden) föreslår aws / aws-sdk-php att installera doktrin / cache (Att använda DoctrineCacheAdapter) Skriva låsfil Generera autoload-filer
Efteråt installerade jag också de två bibliotek som det föreslår, men installerade inte alla nästa nivå av förslag till min lokala utvecklingsmaskin:
$ komponent kräver aws / aws-php-sns-message-validator Använda version ^ 1.1 för aws / aws-php-sns-message-validator ./composer.json har uppdaterats Laddar kompositregister med paketinformation Uppdatering av beroenden (inklusive krav- dev) - Installera aws / aws-php-sns-message-validator (1.1.0) Laddar från cache Skriva låsfil Generera autoload-filer $ komponent kräver cache / doktrinadapter Med version ^ 0.5.0 för cache / doktrinadapter. /composer.json har uppdaterats Laddar kompositarkataloger med paketinformation Uppdatering av beroenden (inklusive krav-dev) - Installera doktrin / cache (v1.6.0) Laddar från cache - Installera fd / cache (1.0.0) Laddar från cache - Installera cache / taggable-cache (0.4.0) Laddar från cache - Installera fd / logga (1.0.0) Laddar från cache - Installera cache / adapter-common (0.3.2) Laddar från cache - Installera cache / doktrinadapter (0.5. 0) Laddar från cache-cache / doktrinadapter föreslår installation av ext-apc (tillåter caching med Apache) cache / doktrinadapter föreslår att installera ext-memcache (tillåter caching med Memcache) cache / doktrinadapter föreslår att installera ext-memcached (tillåter caching med Memcached) cache / doktrinadapter föreslår installering av extredis (tillåter caching med Redis) Skriva låsfil Generera autoload-filer
Jag registrerade också awssdk
komponent inom hej / config / web.php:
'components' => ['class' => 'fedemotta \ awssdk \ AwsSdk', 'credentials' => [// du kan använda en annan metod för att ge åtkomst 'key' => $ config [ 'aws_s3_access'], 'secret' => $ config ['aws_s3_secret'],], 'region' => $ config ['aws_s3_region'], // dvs: 'us-east-1' version '=>' senaste ', // dvs:' senaste '],
För dagens demonstration skapade jag en hej / controllers / StorageController.php med åtgärdsmetoder för att köra varje exempel, till exempel http: // localhost: 8888 / hej / lagring / bläddra för att bläddra i kataloger.
Dessa metoder kallar i sin tur Storage.php-modellen som jag skapade med egna metoder.
Här är regulatorkoden:
public function actionBrowse () $ s = ny lagring (); $ S-> bläddra (Jeff-Reifman-wp ", "manual");
Den begär att lagringsmodellen når upp till molnen i "S3ky" och bläddra i den manuella katalogen.
Varje gång Storage.php-modellen är instantierad laddar den AWS SDK-förlängningen och skapar en S3-förekomst:
aws = Yii :: $ app-> awssdk-> getAwsSdk (); $ this-> s3 = $ this-> aws-> createS3 ();
I mitt bläddraexempel jag bara echoing kataloger och filer, men du kan gärna anpassa den här koden som du behöver:
public feature browse ($ bucket = ", $ prefix =") $ result = $ this-> s3-> listObjects (['Bucket' => $ hink, 'Prefix' => $ prefix]) -> toArray ; foreach ($ resultat som $ r) if (is_array ($ r)) om (array_key_exists ('statusCode', $ r)) echo 'Effektiv URL:'. $ r ['effectiveUri'].
'; else foreach ($ r som $ item) echo $ item ['Key']. '
'; annat echo $ r. '
';
Här är resultaten när jag bläddrar till http: // localhost: 8888 / hej / lagring / bläddra:
För att ladda upp en fil måste du ange den lokala sökvägen och fjärrdestinationsnyckeln. Här är kontrollerkoden för uppladdning:
public function actionUpload () $ bucket = 'jeff-reifman-wp'; $ keyname = '/manual/upload.txt'; $ filepath = '/ Users / Jeff / Sites / hej / upload.txt'; $ s = ny lagring (); $ result = $ s-> upload ($ bucket, $ keyname, $ filepath); echo $ resultat ['ObjectURL'];
Och här är lagringsmodellmetoden:
public function upload ($ bucket, $ keyname, $ filepath) $ result = $ this-> s3-> putObject (array ('Bucket' => $ hink, 'Key' => $ keyname, 'SourceFile' => $ filadress, 'ContentType' => 'text / vanligt', 'ACL' => 'allmänläs', 'StorageClass' => 'REDUCED_REDUNDANCY', 'Metadata' => array ('param1' => 'värde 1' 'param2' => 'värde 2'))); returnera $ resultat;
Bläddring till http: // localhost: 8888 / hej / lagring / uppladdning visar återvändande URL från vilken jag kan se den uppladdade filen, eftersom jag angav offentliga läsning
i min kod ovan:
I sin tur visar webbläsaren till S3-adressen ovan innehållet i den uppladdade filen:
Detta är ett test att ladda upp till S3
Här är kontrollkoden för nedladdning av en fil:
public function actionDownload () $ s = ny lagring (); $ f = $ s-> ladda ner ('jeff-reifman-wp', 'filer / 2013/01 / i103-wedding-cover.jpg'); // ladda ner filhuvudet ('Innehåll-Typ:'. $ f ['ContentType']); echo $ f ['Body'];
Eftersom webbläsaren svarar på innehållstypen ska den visa den lämpliga bilden som jag begär här.
Notera: Jag laddar ner en omslagsbild från min erfarenhet som gifter mig med ett företag som heter Corporate Person till en kvinna (ja det hände faktiskt). Äktenskapet fungerade inte på lång sikt.
Här är lagringsmodellkoden för nedladdning:
public function download ($ bucket = ", $ key =") // få det sista objektet från s3 // $ object = end ($ result ['Contents']); // $ key = $ object ['Key']; $ file = $ this-> s3-> getObject (['Bucket' => $ hink, 'Key' => $ key,]); returnera $ file; // spara det på disken
Det här är vad du ser när filen strömmar till webbläsaren, det är bruden som firar genom att vifta den faktiska äktenskapslicensen till Corporate Person (jag ler i bakgrunden, uppdraget uppnåtts).
Visst kan du lika enkelt lagra resultaten på din server i en fil. Det är upp till dig. Jag uppmuntrar dig att spela med koden och anpassa den som du behöver.
Jag hoppas det hjälper dig med grunderna att använda AWS S3 från din Yii-applikation.
Om du gillar begreppet molnbaserat objekt och fillagring men vill hitta andra leverantörer, kolla alternativ till Amazon AWS. Jag har gradvis flyttat från AWS av ett antal skäl som nämns i artikeln. En av mina följande uppgifter är att migrera mina S3-objekt som fortfarande delvis används för min egen server, vilket jag kan spegla med KeyCDN.
Titta på kommande tutorials i vår programmering med Yii2-serien när vi fortsätter att dyka in i olika aspekter av ramen. Du kanske också vill kolla in vår Bygga din start med PHP-serien som använder Yii2s avancerade mall när vi bygger en verklig applikation. Programmet för mötesplanering i startserien är nu klar för användning, och det är allt byggt i Yii.
Om du vill veta när nästa Yii2 handledning kommer, följ mig @reifman på Twitter eller kolla min instruktörssida.