ThemeForest har en fin funksjon; Det tillater forfatterne å laste opp zip-filer som inneholder skjermbilder av deres temaer. Et skript trekker deretter ut disse filene og viser bildene tilsvarende. Selv om jeg tviler på at utviklerne brukte PHP til å utføre denne oppgaven ... det er det vi skal bruke!
Når du vil tillate at brukerne laster opp filer, må du sette "enctype" på skjemaetiketten lik "Multipart / formdata". Vi stiller deretter handlingen lik den samme siden, og metoden er lik posten.
For å holde ting som barebones som mulig, har vi bare en filinngang og en sende-knapp. Legg merke til at vi har satt navnet på filinngangen til "fupload". Vi vil snart bruke denne verdien for å avgjøre hvorvidt siden har postet tilbake.
Øverst på siden index.php, før doktypen er blitt deklarert, lim inn i følgende:
La oss ta det trinnvis.
La oss anta at en bruker velger en fil som heter "myPics.zip".
La oss da eksplodere filnavnet i to deler: navnet og utvidelsen.
$ name = explode ('.', $ filnavn); $ target = 'extracted /'. $ navn [0]. '-'. tid() . '/';
Fortsetter med vårt eksempel "myPics.zip" -fil - $ navn [0] vil likne "myPics". $ navn [1] vil likne "zip".
Deretter oppretter vi en ny variabel kalt "$ target". Dette blir stedet du lagret filen vår. For å sikre at en annen bruker med det samme "myPics" -navnet ikke har overskrevet sine filer, må vi sørge for at vi lagrer filene til et unikt sted. For å utføre denne oppgaven, implementerer vi funksjonen "tid ()". Hvis vi legger til denne verdien til navnet på den opplastede filen, kan vi være sikre på at vi vil ende opp med et unikt mappenavn!
$ target = "extracted / myPics-02151985 /"
Umiddelbart etter din $ target-variabel, lim inn i følgende:
$ accepted_types = array ('application / zip', 'application / x-zip-komprimert', 'multipart / x-zip', 'application / s-compressed'); foreach ($ accepted_types as $ mime_type) if ($ mime_type == $ type) $ okay = true; gå i stykker;
Dessverre registrerer Safari og Chrome ikke en type for zip-filer. Dette skaper et problem for oss. Etter litt forskning kunne jeg ikke finne en enkel løsning - uten å bruke en forlengelse (PEAR). I stedet vil vi sørge for at filnavnet i hvert fall ender i "zip". Det bør bemerkes at dette ikke er 100% trygt. Hva om brukeren lastet opp en annen filtype som endte i "zip"? Gi gjerne anbefalinger! :)
$ okay = strtolower ($ name [1]) == 'zip'? sant: false;
Deretter sjekker vi for å se om $ okay er feil. Hvis det er, vet vi at en "zip" -fil ikke ble valgt. I slike tilfeller vil vi fortelle PHP å dø.
hvis (! $ ok) die ("Vennligst velg en zip-fil, dummy!");
mkdir ($ target); $ saved_file_location = $ target. $ Filnavn; hvis (move_uploaded_file ($ source, $ saved_file_location)) openZip ($ saved_file_location); ellers die ("Det var et problem. Beklager!");
Opprett en ny side og lagre den som "functions.php". Legg nå følgende kode:
åpen ($ file_to_open); hvis ($ x === true) $ zip-> extractTo ($ target); $ Zip> close (); koble fra ($ file_to_open); else die ("Det oppstod et problem. Vennligst prøv igjen!"); ?>
Denne funksjonen vil akseptere en parameter: $ file_to_open. Denne parameteren vil inneholde plasseringen av zip-filen som vi prøver å trekke ut!
Husk - vi har opprettet vår nye 'functions.php' -fil, men vi må inkludere det! Legg til følgende øverst på siden 'index.php', like etter åpningen av PHP-taggen.
require_once 'functions.php';
Det vi har så langt fungerer perfekt! Men for å gi deg litt tilbakemelding, la oss skanne den nye katalogen og ekko innholdet. Du bør slette denne neste kodeblokken fra prosjektet ditt. Det er bare for testing. Hvis du vil beholde det, ekko informasjonen ut i kroppsmerket.
$ scan = scandir ($ target. $ navn [0]); skrive ut '
Jeg vil ikke gå over denne siste delen for mye - det er unødvendig. Men hvis du ønsker en fullstendig forklaring, pass på å se den tilhørende skjermbildet! For å oppsummere det, skanner dette siste skriptet vår nye katalog og ekkoer ut en uordnet liste som inneholder innholdet.
Ikke for vanskelig, eh? Det er en pen funksjon som enkelt kan implementeres i prosjektene dine. Hva er tankene dine om sikkerhet når det gjelder å laste opp zip-filer? Hvordan kan vi være sikre på at innholdet i zip-filen ikke er skadelig? Jeg vil gjerne høre alles mening om disse sikkerhetsimplikasjonene. Hvis ikke håndtert riktig, kan en hacker forårsake alvorlig skade på serveren din. La oss diskutere det! Det er mulig å søke etter farlige filtyper (.htaccess-filer) og slette dem.
'; for ($ i = 0; $ i= 3) $ check_for_html_doc = strpos ($ scan [$ i], 'html'); $ check_for_php = strpos ($ scan [$ i], 'php'); hvis ($ check_for_html_doc === false && $ check_for_php === false) echo ' '. $ scan [$ i]. ' '; annet echo ''. $ scan [$ i]. ' '; skrive ut ''; ?>Slik laster du opp og åpner zip-filer med PHP Last opp en zip-fil