ThemeForest are o caracteristică frumoasă; Acesta permite autorilor să încarce fișiere zip care conțin capturi de ecran ale temelor lor. Un script apoi extrage aceste fișiere și afișează imaginile în consecință. Deși mă îndoiesc că dezvoltatorii au folosit PHP pentru a îndeplini această sarcină ... asta vom folosi!
Ori de câte ori veți permite utilizatorilor să încarce fișiere, trebuie să setați "enctype" al etichetei de formular egal cu "/ Formular-date multipart". Apoi vom seta acțiunea egală cu aceeași pagină și metoda va fi egală cu postarea.
Pentru a păstra lucrurile pe cât posibil, avem doar o intrare de fișier și un buton de trimitere. Rețineți că am setat numele fișierului de intrare în "fupload". Vom utiliza în curând această valoare pentru a determina dacă pagina a fost sau nu postată înapoi.
În partea de sus a paginii dvs. index.php, înainte de declararea doctype, lipiți următoarele:
Să o luăm pas cu pas.
Să presupunem că un utilizator alege un fișier numit "myPics.zip".
Apoi, să explodez numele fișierului în două bucăți: numele și extensia.
$ nume = explode ('.', $ filename); $ target = 'extras /'. $ nume [0]. "-". ora (). '/';
Continuând cu exemplul nostru "myPics.zip" fișierul - $ name [0] va fi egal cu "myPics". $ name [1] va fi egală cu "zip".
Apoi, vom crea o nouă variabilă numită "$ target". Aceasta va fi locația la care este salvat fișierul nostru. Pentru a ne asigura că un alt utilizator cu același nume "myPics" nu are suprascrise fișierele, trebuie să ne asigurăm că salvăm fișierele într-o locație unică. Pentru a îndeplini această sarcină, vom implementa funcția "time ()". Dacă adăugăm această valoare la numele fișierului încărcat, putem fi siguri că vom termina cu un nume de folder unic!
$ target = "extras / myPics-02151985 /"
Imediat după variabila destinație $, lipiți următoarele:
$ accept_types = array ("aplicație / zip", "aplicație / x-zip-comprimat", "multipart / x-zip", "aplicație / s-comprimat"); foreach ($ accept_types ca $ mime_type) dacă ($ mime_type == tip $) $ okay = true; pauză;
Din păcate, Safari și Chrome nu înregistrează un tip pentru fișiere zip. Acest lucru creează o problemă pentru noi. După un pic de cercetare, nu am reușit să găsesc o soluție ușoară - fără a utiliza o prelungire (PEAR). În schimb, vom asigura că numele fișierului se termină cel puțin în "zip". Trebuie remarcat faptul că acest lucru nu este 100% sigur. Ce se întâmplă dacă utilizatorul a încărcat un alt tip de fișier care sa încheiat cu "zip"? Nu ezitați să oferiți recomandări! :)
$ okay = strtolower ($ nume [1]) == 'zip'? adevarat fals;
Apoi, vom verifica dacă $ bine este falsă. Dacă este cazul, știm că nu a fost selectat un dosar "zip". În astfel de cazuri, îi vom spune lui PHP să moară.
dacă (! $ bine) mor ("Vă rugăm să alegeți un fișier zip, dummy!");
mkdir ($ țintă); $ save_file_location = $ target. nume de fișier $; dacă move_uploaded_file ($ source, $ saved_file_location)) openZip ($ saved_file_location); altceva die ("A fost o problemă, îmi pare rău!");
Creați o pagină nouă și salvați-o ca "functions.php". Acum adăugați următorul cod:
deschis ($ file_to_open); dacă ($ x === adevărat) $ zip-> extractTo ($ target); $ Zip> close (); deconectez ($ file_to_open); else die ("A apărut o problemă. Încercați din nou!"); ?>
Această funcție va accepta un parametru: $ file_to_open. Acest parametru va conține locația fișierului zip pe care încercăm să-l extragem!
Amintiți-vă - am creat noul nostru fișier "functions.php", dar trebuie să îl includeți! Adăugați următoarele în partea de sus a paginii dvs. "index.php", imediat după eticheta PHP de deschidere.
require_once 'functions.php';
Ceea ce până acum funcționează perfect! Dar, doar pentru a vă oferi feedback, hai să scanăm noul director și să reluăm conținutul. Ar trebui să ștergeți următorul bloc de cod din proiectul dvs. Este doar pentru testare. Dacă doriți să păstrați-o, ecou informațiile aflate în interiorul etichetei corporale.
$ scan = scandir ($ țintă; $ nume [0]); imprimare '
Nu voi trece prea mult această ultimă parte - pentru că este inutil. Cu toate acestea, dacă doriți o explicație completă, asigurați-vă că vizionați ecranul asociat! Pentru a sinteti rapid, ultimul script scanează noul nostru director și emite o listă neordonată conținând conținutul.
Nu prea tare, nu? Este o caracteristică elegantă care poate fi ușor implementată în proiectele dvs. Care sunt gândurile dvs. cu privire la securitate atunci când vine vorba de încărcarea fișierelor zip? Cum putem fi siguri că conținutul fișierului zip nu este dăunător? Mi-ar plăcea să aud opinia tuturor cu privire la aceste implicații în materie de securitate. Dacă nu este gestionat corect, un hacker ar putea provoca vătămări serioase serverului dvs. Să o discutăm! Este posibil să căutați tipuri de fișiere periculoase (fișiere .htaccess) și să le ștergeți.
„; pentru ($ i = 0; $ i= 3) $ check_for_html_doc = strpos ($ scan [$ i], "html"); $ check_for_php = strpos ($ scan [$ i], "php"); dacă ($ check_for_html_doc === false && $ check_for_php === false) echo ' ". $ scanare [$ i]. ' „; altceva echo '". $ scanare [$ i]. ' „; imprimare '„; ?>Cum să încărcați și să deschideți fișiere zip cu PHP Încărcați un fișier zip