ThemeForest ha una bella funzionalità; Permette agli autori di caricare file zip contenenti screenshot dei loro temi. Uno script quindi estrae questi file e visualizza le immagini di conseguenza. Anche se dubito che gli sviluppatori abbiano usato PHP per svolgere questo compito ... questo è quello che useremo!
Ogni volta che consentirai ai tuoi utenti di caricare file, devi impostare "enctype" del tag form uguale a "/ Form-data multipart". Successivamente imposteremo l'azione uguale alla stessa pagina e il metodo equivale a postare.
Per mantenere le cose come barebone possibile, abbiamo solo un input di file e un pulsante di invio. Nota che abbiamo impostato il nome del file in "fupload". Presto utilizzeremo questo valore per determinare se la pagina è stata postata o meno.
Nella parte superiore della pagina index.php, prima che il doctype sia stato dichiarato, incollare quanto segue:
Facciamolo passo dopo passo.
Supponiamo che un utente scelga un file chiamato "myPics.zip".
Quindi, esplodiamo il nome del file in due parti: il nome e l'estensione.
$ name = explode ('.', $ nomefile); $ target = 'estratto /'. $ nome [0]. '-'. tempo() . '/';
Continuando con il nostro esempio "myPics.zip" file - $ nome [0] sarà uguale a "myPics". $ nome [1] sarà uguale a "zip".
Successivamente, creiamo una nuova variabile chiamata "$ target". Questa sarà la posizione in cui il nostro file è stato salvato. Per garantire che un utente diverso con lo stesso nome "myPics" non abbia i suoi file sovrascritti, dobbiamo assicurarci di salvare i file in una posizione univoca. Per realizzare questo compito, implementeremo la funzione "time ()". Se aggiungiamo questo valore al nome del file caricato, possiamo essere certi che avremo un nome di cartella univoco!
$ target = "estratto / myPics-02151985 /"
Subito dopo la variabile $ target, incolla quanto segue:
$ accepted_types = array ('application / zip', 'application / x-zip-compressed', 'multipart / x-zip', 'application / s-compressed'); foreach ($ accepted_types as $ mime_type) if ($ mime_type == $ type) $ okay = true; rompere;
Purtroppo, Safari e Chrome non registrano un tipo per i file zip. Questo crea un problema per noi. Dopo un po 'di ricerche, non sono stato in grado di trovare una soluzione facile, senza usare un'estensione (PEAR). Invece, ci assicureremo che il nome del file finisca almeno in "zip". Va notato che questo non è sicuro al 100%. Cosa succede se l'utente ha caricato un tipo di file diverso che termina con "zip"? Sentiti libero di offrire raccomandazioni! :)
$ okay = strtolower ($ name [1]) == 'zip'? vero falso;
Successivamente, controlleremo se $ ok è falso. Se lo è, sappiamo che non è stato scelto un file "zip". In questi casi, diremo a PHP di morire.
if (! $ okay) die ("Per favore, scegli un file zip, manichino!");
mkdir ($ target); $ saved_file_location = $ target. $ Nomefile; if (move_uploaded_file ($ source, $ saved_file_location)) openZip ($ saved_file_location); else die ("C'era un problema, mi dispiace!");
Crea una nuova pagina e salvala come "functions.php". Ora aggiungi il seguente codice:
aperta ($ file_to_open); if ($ x === true) $ zip-> extractTo ($ target); $ Archivio zip> close (); unlink ($ file_to_open); else die ("C'era un problema, per favore riprova!"); ?>
Questa funzione accetta un parametro: $ file_to_open. Questo parametro conterrà la posizione del file zip che stiamo cercando di estrarre!
Ricorda: abbiamo creato il nostro nuovo file "functions.php", ma dobbiamo includerlo! Aggiungi quanto segue all'inizio della tua pagina 'index.php', subito dopo l'apertura del tag PHP.
require_once 'functions.php';
Ciò che abbiamo finora funziona perfettamente! Ma, solo per darti un feedback, scansioniamo la nuova directory e riecheggeremo i contenuti. Dovresti cancellare questo prossimo blocco di codice dal tuo progetto. È solo per i test. Se vuoi mantenerlo, fai eco alle informazioni all'interno del tag del corpo.
$ scan = scandir ($ target. $ name [0]); stampare '
Non parlerò troppo di quest'ultima parte, perché non è necessario. Tuttavia, se desideri una spiegazione completa, assicurati di guardare lo screencast associato! Per riassumere rapidamente, quest'ultimo script analizza la nostra nuova directory ed esegue l'echi di una lista non ordinata contenente i contenuti.
Non troppo difficile, eh? È una caratteristica chiara che può essere facilmente implementata nei tuoi progetti. Quali sono i tuoi pensieri sulla sicurezza quando si tratta di caricare file zip? Come possiamo essere sicuri che il contenuto del file zip non sia dannoso? Mi piacerebbe sentire l'opinione di tutti su queste implicazioni sulla sicurezza. Se non gestito correttamente, un hacker potrebbe causare gravi danni al tuo server. Discutiamolo! È possibile cercare tipi di file pericolosi (file .htaccess) ed eliminarli.
'; per ($ i = 0; $ i= 3) $ check_for_html_doc = strpos ($ scan [$ i], 'html'); $ check_for_php = strpos ($ scan [$ i], 'php'); if ($ check_for_html_doc === false && $ check_for_php === false) echo ' '. $ scan [$ i]. ' '; else echo ''. $ scan [$ i]. ' '; print ''; ?>Come caricare e aprire file zip con PHP Carica un file zip