ThemeForest har en bra funktion; Det tillåter författarna att ladda upp zip-filer som innehåller skärmdumpar av sina teman. Ett skript extraherar dessa filer och visar bilderna i enlighet därmed. Även om jag tvivlar på att utvecklarna använde PHP för att utföra den här uppgiften ... det är vad vi ska använda!
När du vill tillåta dina användare att ladda upp filer måste du ställa in "enctype" på formtaggen lika med "Multipart / form-data". Vi ställer sedan åtgärden lika med samma sida, och metoden motsvarar inlägget.
För att behålla saker som bara ben, har vi bara en filinmatning och en inlämningsknapp. Observera att vi har satt namnet på filinmatningen till "fupload". Vi använder snart det här värdet för att avgöra om sidan har skrivit tillbaka eller inte.
Högst upp på din index.php-sida, innan doktypen har deklarerats, klistra in i följande:
Låt oss ta det steg för steg.
Låt oss anta att en användare väljer en fil som heter "myPics.zip".
Låt oss sedan explodera filnamnet i två delar: namnet och förlängningen.
$ name = explodera ('.', $ filnamn); $ target = 'extraherad /'. $ namn [0]. '-'. tid (). '/';
Fortsätter med vårt exempel "myPics.zip" -fil - $ namn [0] kommer att motsvara "myPics". $ namn [1] kommer att motsvara "zip".
Därefter skapar vi en ny variabel som heter "$ target". Detta blir den plats som vår fil sparas på. För att säkerställa att en annan användare med samma "myPics" -namn inte har skrivit över sina filer måste vi se till att vi sparar filerna till en unik plats. För att uppnå denna uppgift, implementerar vi funktionen "tid ()". Om vi lägger till det här värdet på namnet på den uppladdade filen kan vi vara säkra på att vi kommer att sluta med ett unikt mappnamn!
$ target = "extraherade / myPics-02151985 /"
Omedelbart efter din $ målvariabel klistra in i följande:
$ accepted_types = array ('application / zip', 'application / x-zip-compressed', 'multipart / x-zip', 'application / s-compressed'); foreach ($ accepted_types as $ mime_type) if ($ mime_type == $ typ) $ okay = true; ha sönder;
Tyvärr registrerar Safari och Chrome inte en typ för zip-filer. Detta skapar ett problem för oss. Efter lite forskning kunde jag inte hitta en enkel lösning - utan att använda en förlängning (PEAR). Istället ska vi se till att filnamnet åtminstone slutar i "zip". Det bör noteras att detta inte är 100% säkert. Vad händer om användaren laddar upp en annan filtyp som slutade i "zip"? Gärna ge rekommendationer! :)
$ okay = strtolower ($ name [1]) == 'zip'? sant falskt;
Därefter kommer vi att kontrollera om $ okej är felaktigt. Om det är, vet vi att en zip-fil inte valdes. I sådana fall kommer vi att berätta för PHP att de ska dö.
om (! $ okej) die ("Vänligen välj en zip-fil, dummy!");
mkdir ($ mål); $ saved_file_location = $ mål. $ Filnamn; om (move_uploaded_file ($ source, $ saved_file_location)) openZip ($ saved_file_location); else die ("Det var ett problem. Tyvärr!");
Skapa en ny sida och spara den som "functions.php". Lägg nu till följande kod:
open ($ file_to_open); om ($ x === true) $ zip-> extractTo ($ target); $ Zip-> close (); bort länken ($ file_to_open); else die ("Det uppstod ett problem. Vänligen försök igen!"); ?>
Den här funktionen accepterar en parameter: $ file_to_open. Den här parametern innehåller placeringen av zip-filen som vi försöker extrahera!
Kom ihåg - vi har skapat vår nya "functions.php" -fil, men vi måste inkludera den! Lägg till följande på toppen av din "index.php" -sida, strax efter öppnande av PHP-taggen.
require_once 'functions.php';
Det vi har hittills fungerar perfekt! Men för att ge dig lite återkoppling, låt oss skanna den nya katalogen och echo innehållet. Du bör ta bort det här koden från ditt projekt. Det är bara för testning. Om du vill behålla det, echo informationen ut i kroppslabeln.
$ scan = scandir ($ target. $ namn [0]); skriva ut '
Jag kommer inte att gå över den här sista delen för mycket - eftersom det inte är nödvändigt. Men om du vill ha en fullständig förklaring, var noga med att titta på den tillhörande skärmbilden! För att snabbt summera upp det här skriptet skannar vår nya katalog och echos ut en oorderad lista innehållande innehållet.
Inte för hårt, va? Det är en snygg funktion som enkelt kan implementeras i dina projekt. Vad är dina tankar om säkerhet när det gäller att ladda upp zip-filer? Hur kan vi vara säkra på att innehållet i zip-filen inte är skadligt? Jag skulle gärna höra allas åsikter om dessa säkerhetsimplikationer. Om det inte hanteras ordentligt kan en hackare orsaka allvarliga skador på din server. Låt oss diskutera det! Det går att söka efter farliga filtyper (.htaccess-filer) och radera dem.
'; för ($ i = 0; $ i= 3) $ check_for_html_doc = strpos ($ scan [$ i], 'html'); $ check_for_php = strpos ($ scan [$ i], 'php'); om ($ check_for_html_doc === false && $ check_for_php === false) echo ' '. $ scan [$ i]. ' '; annars echo ''. $ scan [$ i]. ' '; skriv ut ''; ?>Så här laddar du upp och öppnar zip-filer med PHP Ladda upp en Zip-fil