ThemeForest hat eine nette Funktion; Es ermöglicht den Autoren, Zip-Dateien mit Screenshots ihrer Designs hochzuladen. Ein Skript extrahiert dann diese Dateien und zeigt die Bilder entsprechend an. Obwohl ich bezweifle, dass die Entwickler PHP verwendet haben, um diese Aufgabe zu erledigen ... das werden wir verwenden!
Jedes Mal, wenn Sie Ihren Benutzern das Hochladen von Dateien gestatten, müssen Sie den "enctype" des Formulartags gleich setzen "multipart / form-data". Als Nächstes setzen wir die Aktion auf dieselbe Seite und die Methode auf post.
Um die Dinge so gut wie möglich zu halten, haben wir nur eine Dateieingabe und eine Senden-Schaltfläche. Beachten Sie, dass wir den Namen der Dateieingabe auf "fupload" gesetzt haben. Wir werden diesen Wert in Kürze verwenden, um festzustellen, ob die Seite zurückgeschickt wurde oder nicht.
Fügen Sie am Anfang der Seite "index.php" vor der Deklaration des Doctype Folgendes ein:
Nehmen wir es Schritt für Schritt.
Nehmen wir an, ein Benutzer wählt eine Datei namens "myPics.zip" aus..
Lassen Sie uns als Nächstes den Dateinamen in zwei Teile aufteilen: den Namen und die Erweiterung.
$ name = explodieren ('.', $ dateiname); $ target = 'extrahiert /'. $ name [0]. '-'. Zeit() . '/';
Fortsetzung unserer Beispieldatei "myPics.zip" - $ name [0] entspricht "myPics". $ name [1] wird gleich "zip" sein.
Als Nächstes erstellen wir eine neue Variable mit dem Namen "$ target". Dies ist der Ort, an dem unsere Datei gespeichert wird. Um sicherzustellen, dass die Dateien eines anderen Benutzers mit dem Namen "myPics" nicht überschrieben werden, müssen wir sicherstellen, dass die Dateien an einem eindeutigen Ort gespeichert werden. Um diese Aufgabe zu erfüllen, implementieren wir die Funktion "time ()". Wenn wir diesen Wert an den Namen der hochgeladenen Datei anhängen, können wir sicher sein, dass wir einen eindeutigen Ordnernamen erhalten!
$ target = "extrahiert / myPics-02151985 /"
Fügen Sie unmittelbar nach Ihrer $ target-Variablen Folgendes ein:
$ Accepted_types = Array ('application / zip', 'application / x-zip-komprimiert', 'multipart / x-zip', 'application / s-komprimiert'); foreach ($ akzeptierte_typen als $ mime_type) if ($ mime_type == $ type) $ okay = true; brechen;
Leider registrieren Safari und Chrome keinen Typ für ZIP-Dateien. Dies schafft ein Problem für uns. Nach einiger Recherche konnte ich keine einfache Lösung finden - ohne die Verwendung einer Erweiterung (PEAR). Stattdessen sorgen wir dafür, dass der Dateiname mindestens in "zip" endet.. Es sei darauf hingewiesen, dass dies nicht 100% sicher ist. Was ist, wenn der Benutzer einen anderen Dateityp hochgeladen hat, der mit 'zip' endete? Fühlen Sie sich frei, um Empfehlungen zu geben! :)
$ okay = strtolower ($ name [1]) == 'zip'? wahr falsch;
Als Nächstes prüfen wir, ob $ okay falsch ist. Wenn dies der Fall ist, wissen wir, dass keine ZIP-Datei ausgewählt wurde. In solchen Fällen sagen wir PHP, dass es sterben soll.
if (! $ okay) die ("Bitte wählen Sie eine ZIP-Datei, Dummy!");
mkdir ($ target); $ saved_file_location = $ target. $ Dateiname; if (move_uploaded_file ($ source, $ saved_file_location)) openZip ($ saved_file_location); else die ("Es gab ein Problem. Entschuldigung!");
Erstellen Sie eine neue Seite und speichern Sie sie als "functions.php". Fügen Sie nun folgenden Code hinzu:
offen ($ file_to_open); if ($ x === true) $ zip-> extractTo ($ target); $ zip-> close (); unlink ($ file_to_open); else die ("Es gab ein Problem. Bitte versuchen Sie es erneut!"); ?>
Diese Funktion akzeptiert einen Parameter: $ file_to_open. Dieser Parameter enthält den Ort der ZIP-Datei, die wir extrahieren möchten!
Denken Sie daran - wir haben unsere neue "functions.php" -Datei erstellt, müssen sie aber einfügen! Hängen Sie das folgende an den Anfang Ihrer 'index.php'-Seite, direkt nach dem öffnenden PHP-Tag.
required_once 'functions.php';
Was wir bisher haben, funktioniert einwandfrei! Aber um Ihnen etwas Feedback zu geben, lassen Sie uns das neue Verzeichnis durchsuchen und den Inhalt wiederholen. Sie sollten diesen nächsten Codeblock aus Ihrem Projekt löschen. Es ist nur zum Testen. Wenn Sie es behalten möchten, geben Sie die Informationen im body-Tag aus.
$ scan = scandir ($ target. $ name [0]); drucken '
Ich werde diesen letzten Teil nicht zu sehr durchgehen, da er unnötig ist. Wenn Sie jedoch eine ausführliche Erklärung wünschen, sollten Sie unbedingt den zugehörigen Screencast ansehen! Um es kurz zusammenzufassen, scannt dieses letzte Skript unser neues Verzeichnis und gibt eine ungeordnete Liste heraus, die den Inhalt enthält.
Nicht zu schwer, wie? Es ist eine nette Funktion, die leicht in Ihre Projekte integriert werden kann. Was sind Ihre Gedanken zur Sicherheit beim Hochladen von ZIP-Dateien? Wie können wir sicher sein, dass der Inhalt der ZIP-Datei nicht schädlich ist? Ich würde gerne alle Meinungen zu diesen Auswirkungen auf die Sicherheit hören. Bei unsachgemäßer Handhabung kann ein Hacker Ihren Server ernsthaft beschädigen. Lass es uns besprechen! Es ist möglich, nach gefährlichen Dateitypen (.htaccess-Dateien) zu suchen und diese zu löschen.
'; für ($ 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]. ' '; drucken ''; ?>So laden und laden Sie Zip-Dateien mit PHP Laden Sie eine Zip-Datei hoch