Cu câteva săptămâni în urmă, Nettuts + a postat un tutorial introductiv pentru utilizarea sistemului Amazon Simple Storage System (S3). Posibilitatea de a încărca un număr nelimitat de fișiere pentru aproape orice bani este mare, dar ar fi chiar mai bine dacă utilizatorii dvs. ar putea încărca fișiere de pe site-ul dvs. Web. În acest fel, nu ar trebui să vă faceți griji pentru dimensiunea serverului dvs. web pentru o secundă. Sa incercam!
Practic ceea ce vom face este să utilizați un element de fișier HTML standard și o clasă ușor de folosit S3 PHP pentru a crea o pagină în care oamenii pot încărca un fișier în contul dvs. S3 și pot obține informații despre fișierele care au fost deja încărcate. Pentru aceasta veți avea nevoie de un cont Amazon S3 și de un server de web activat PHP. Dacă nu ați auzit despre Amazon S3 sau nu aveți încă un cont, citiți mai întâi Tutorialul introductiv Collis 'S3.
Acum, primul lucru de care avem nevoie este o modalitate prin care PHP poate comunica cu serverul S3. Donovan Schonknecht a scris o clasă PHP pentru acest lucru, așa că, mai degrabă decât să încercăm să reinventăm roata, vom folosi asta!
Apoi, faceți un nou fișier numit page.php în același folder. Primul lucru pe care trebuie să-l facem este să includeți fișierul S3.php. Vom folosi funcția requ_once () în php. Această funcție va include fișierul numai dacă nu a fost inclusă anterior pe aceeași pagină. Acest lucru este să ne asigurăm că nu vom întâmpina nici o problemă cu redefinirea funcțiilor atunci când în mod accidental scriptul încearcă să includă fișierul a doua oară.
Apoi, va trebui să accesăm informațiile de acces ale serviciilor Amazon Web Services (AWS) pe care scriptul trebuie să le acceseze pentru serverul nostru S3. Acestea sunt cheia de acces și cheia secretă furnizate de Amazon (din nou, dacă nu știți despre ce mă refer, vedeți tutorialul introductiv NETTUTS). Acum avem toate informațiile necesare pentru a iniția clasa. Acest cod a fost plasat în partea de sus a paginii corp Etichete.
Acum să facem un simplu formular html cu un element de fișier în el. Acest element permite utilizatorilor să navigheze unitatea locală pentru un fișier. Când utilizatorul apasă butonul de trimitere, fișierul va fi încărcat automat ca un fișier temporar pe server și informațiile despre fișier vor fi trimise în variabila POST.
Iată fragmentul de cod. Asigurați-vă că nu uitați enctype = "multipart / form-data" care este necesar pentru ca fișierul să funcționeze. Acest cod trebuie plasat în afara , deoarece este HTML.
Acum, pentru cei nefamiliare cu formele, action = "" spune scriptului care pagină să meargă după ce a fost trimisă. Deoarece am specificat un șir gol acolo, formularul va afișa variabilele și apoi va reîmprospăta pagina curentă. Atunci când pagina este încărcată, vom verifica dacă un formular a fost trimis sau nu. Când a fost trimis un formular, pagina ar trebui să execute scriptul care retrage variabilele post și are grijă de mutarea fișierelor pe serverul S3.
Variabila post trimisă de elementul de fișier este o matrice care conține informații despre fișier. De exemplu: numele fișierului, dimensiunea, tipul și numele temporar. Tot ce vom avea nevoie este numele fișierului și numele temporar. Rețineți că, spre deosebire de alte elemente de formă, elementul de fișier va trimite variabilele la $ _FILES și nu să $ _POST.
Codul PHP de mai jos verifică dacă a fost trimis un formular și se retrag variabilele post. Ne vom ocupa mai târziu de serverul S3. Acest cod trebuie plasat imediat după ce am inițiat clasa s3.
// verificați dacă a fost trimis un formular dacă (isset ($ _ POST ['Submit'])) // variabilele post retreive $ fileName = $ _FILES ['theFile'] ['name']; $ fileTempName = $ _FILES ['file '] [' tmp_name ']; // vom continua scenariul nostru de aici în pasul următor!
Ok, deci avem un formular care trimite un fișier temporar la server și vă lasă câteva informații. Dacă doriți, puteți încărca fișierul pe un server și îl puteți testa. Veți observa că într-adevăr este nevoie de ceva timp pentru a procesa formularul, deoarece în realitate se încarcă un fișier. Oricum, nu veți vedea că fișierul apare oriunde pe server, deoarece a fost stocat doar ca fișier temporar. Tot ce trebuie să faceți este să mutați fișierul încărcat într-o găleată. Mai întâi vom crea o nouă găleată și apoi vom muta fișierul în acea cupă.
Pentru a crea o găleată, vom folosi funcția putBucket (cupă, acl) în care "bucket" este numele bucketului (cuvântul Amazon pentru dosarul principal sau directorul fișierelor). Al doilea argument este Lista de control al accesului (ACL) în care puteți defini cine poate și cine nu poate citi sau scrie în această cupă. Vrem ca cineva să poată citi fișierele noastre, așa că vom folosi S3 :: ACL_PUBLIC_READ. Rețineți că o bucket trebuie să fie creată doar o singură dată, astfel încât, la fiecare dată când acest script este executat, această funcție nu va face nimic, deoarece găleata există deja.
Pentru a muta fișierul vom folosi funcția putObjectFile (sourcefile, bucket, newfilename, acl).Sursa sourcefile este calea catre fisierul pe care dorim sa o mutam, deci in cazul nostru este fisierul temporar care a fost incarcat prin formularul nostru. Bucket este galeata pentru a muta fișierul, care va fi galeata pe care tocmai am creat-o. Newfilename este numele fișierului care va fi introdus în cupă. În acest tutorial vom folosi același nume de fișier ca pe unitatea locală, dar în unele cazuri s-ar putea să doriți să schimbați numele fișierelor. Acl din nou este lista de control al accesului, pe care o vom seta din nou la S3 :: ACL_PUBLIC_READ.
// creați o nouă găleată $ s3-> putBucket ("jurgens-nettuts-tutorial", S3 :: ACL_PUBLIC_READ);
// mutați fișierul dacă ($ s3-> putObjectFile ($ fileTempName, "jurgens-nettuts-tutorial", $ fileName, S3 :: ACL_PUBLIC_READ)) echo "Am încărcat fișierul dvs."; altceva echo "În timpul încărcării fișierului dvs. sa întâmplat ceva ... îmi pare rău.";
Acum când selectați un fișier și apăsați "Încărcare", fișierul va fi stocat pe serverul Amazon. Puteți să o vizualizați deja doar introducând o adresă URL care arată astfel: http: //yourbucketname.s3.amazoneaws.com/yourfile.ext
Pentru atingerea finală, vom dori ca scriptul să trimită o listă de fișiere în cupă. Pentru aceasta vom folosi funcția getBucket (cupa), în care găleata este găleata pe care dorim să o scoatem. Această funcție returnează un tablou cu informații despre fișiere. Fiecare se întoarce și ca o matrice. Pentru a vizualiza:
Vrem să trimitem fiecare fișier din matricea $ bucket_contents. Pentru aceasta vom folosi a pentru fiecare() care va trece prin matrice până când toate elementele vor fi procesate. Acesta va stoca elementul curent în variabila de fișier $ și va executa codul între paranteze. Tot ce trebuie să facem acum este să trimiteți un link către fișier.
Plasați acest cod sub formular pentru a afișa lista acolo.
getBucket ( "Jurgens-nettuts-tutorial"); foreach ($ bucket_contents ca fișier $) $ fname = $ file ['name']; $ furl = "http://jurgens-nettuts-tutorial.s3.amazonaws.com/".$fname; // trimite un link către fișierul ecou "$ fname
";>>
Cu un stil Css mic, rezultatul final ar putea arăta astfel:
Deci, acolo aveți, propriul script nelimitat de încărcare a fișierelor. Desigur, există mult mai mult de făcut cu clasa PHP S3. Luați o privire rapidă la fișierul readme și veți fi bine să mergeți. Este foarte usor de folosit!
Descărcați fișierele sursă
Vizualizați o demonstrație