ThemeForest heeft een leuke functie; Hiermee kunnen de auteurs zip-bestanden uploaden met schermafbeeldingen van hun thema's. Vervolgens extraheert een script deze bestanden en geeft de afbeeldingen dienovereenkomstig weer. Hoewel ik betwijfel of de ontwikkelaars PHP hebben gebruikt om deze taak te volbrengen ... dat is wat we gaan gebruiken!
Elke keer dat u uw gebruikers toestaat om bestanden te uploaden, moet u het "enctype" van de formuletag gelijk maken "Multipart / form-data". Vervolgens stellen we de actie gelijk aan dezelfde pagina en de methode gelijk aan plaatsen.
Om dingen zo barebones mogelijk te houden, hebben we alleen een bestandsinvoer en een verzendknop. Merk op dat we de naam van de invoer van het bestand hebben ingesteld op "fupload". We zullen deze waarde binnenkort gebruiken om te bepalen of de pagina is teruggeplaatst.
Helemaal boven aan uw index.php-pagina, voordat het doctype is gedeclareerd, plakt u het volgende:
Laten we het stap voor stap doen.
Laten we aannemen dat een gebruiker een bestand kiest met de naam "myPics.zip".
Laten we vervolgens de bestandsnaam in twee delen exploderen: de naam en de extensie.
$ name = explode ('.', $ filename); $ target = 'removed /'. $ naam [0]. '-'. tijd (). '/';
Verdergaand met ons voorbeeld "myPics.zip" bestand - $ naam [0] is gelijk aan "myPics". $ naam [1] is gelijk aan "zip".
Vervolgens maken we een nieuwe variabele genaamd "$ target". Dit is de locatie waar ons bestand wordt opgeslagen. Om ervoor te zorgen dat een andere gebruiker met dezelfde 'myPics'-naam zijn bestanden niet overschrijft, moeten we ervoor zorgen dat we de bestanden opslaan op een unieke locatie. Om deze taak te volbrengen, implementeren we de "time ()" -functie. Als we deze waarde toevoegen aan de naam van het geüploade bestand, kunnen we er zeker van zijn dat we eindigen met een unieke mapnaam!
$ target = "extraction / myPics-02151985 /"
Meteen na uw $ doelvariabele plakt u het volgende:
$ accepted_types = array ('application / zip', 'application / x-zip-gecomprimeerd', 'multipart / x-zip', 'application / s-compressed'); foreach ($ accepted_types als $ mime_type) if ($ mime_type == $ type) $ okay = waar; breken;
Helaas registreren Safari en Chrome geen type voor zip-bestanden. Dit creëert een probleem voor ons. Na enig onderzoek was ik niet in staat om een eenvoudige oplossing te vinden - zonder een extensie te gebruiken (PEAR). In plaats daarvan zorgen we ervoor dat de bestandsnaam ten minste eindigt in "zip". Opgemerkt moet worden dat dit niet 100% veilig is. Wat als de gebruiker een ander bestandstype uploadde dat eindigde in 'zip'? Aarzel niet om aanbevelingen te doen! :)
$ okay = strtolower ($ naam [1]) == 'zip'? waar onwaar;
Vervolgens zullen we controleren of $ oke onjuist is. Als dat zo is, weten we dat er geen 'zip'-bestand is gekozen. In dergelijke gevallen vertellen we PHP om te sterven.
if (! $ okay) die ("Kies een zip-bestand, dummy!");
mkdir ($ doel); $ saved_file_location = $ target. $ Filename; if (move_uploaded_file ($ source, $ saved_file_location)) openZip ($ saved_file_location); else die ("Er was een probleem. Sorry!");
Maak een nieuwe pagina en sla deze op als "functions.php". Voeg nu de volgende code toe:
geopend ($ file_to_open); if ($ x === true) $ zip-> extractTo ($ target); $ Zip-> close (); ontkoppelen ($ file_to_open); else die ("Er was een probleem. Probeer het opnieuw!"); ?>
Deze functie accepteert één parameter: $ file_to_open. Deze parameter bevat de locatie van het zipbestand dat we proberen uit te pakken!
Denk eraan - we hebben ons nieuwe 'functions.php'-bestand gemaakt, maar we moeten het opnemen! Voeg het volgende toe bovenaan uw 'index.php'-pagina, net na de eerste PHP-tag.
require_once 'functions.php';
Wat we tot nu toe hebben gedaan, werkt perfect! Maar laten we, om u feedback te geven, de nieuwe map scannen en de inhoud uitlezen. U moet dit volgende codeblok uit uw project verwijderen. Het is alleen voor testen. Als je het wel wilt behouden, herhaal dan de informatie in de body-tag.
$ scan = scandir ($ doel. $ naam [0]); print '
Ik zal dit laatste deel niet te veel bespreken - omdat het niet nodig is. Als u echter een volledige uitleg wilt, let dan op de bijbehorende screencast! Om snel op te tellen, scant dit laatste script onze nieuwe map en echoot een ongeordende lijst met de inhoud.
Niet te moeilijk, toch? Het is een handige functie die eenvoudig in uw projecten kan worden geïmplementeerd. Wat zijn uw mening over beveiliging als het gaat om het uploaden van zip-bestanden? Hoe kunnen we er zeker van zijn dat de inhoud van het zipbestand niet schadelijk is? Ik zou graag ieders mening horen over deze veiligheidsimplicaties. Als een hacker niet correct wordt behandeld, kan dit uw server ernstig schaden. Laten we het bespreken! Het is mogelijk om te zoeken naar gevaarlijke bestandstypen (. Htaccess-bestanden) en deze te verwijderen.
'; voor ($ 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]. ' '; afdrukken ''; ?>Hoe zip-bestanden uploaden en openen met PHP Upload een zipbestand