ThemeForest a une fonctionnalité intéressante; Il permet aux auteurs de télécharger des fichiers zip contenant des captures d'écran de leurs thèmes. Un script extrait ensuite ces fichiers et affiche les images en conséquence. Bien que je doute que les développeurs aient utilisé PHP pour accomplir cette tâche… c'est ce que nous allons utiliser!
À chaque fois que vous autoriserez vos utilisateurs à télécharger des fichiers, vous devez définir le "type" de la balise de formulaire égal à "multipart / form-data". Nous allons ensuite définir l'action égale à la même page et la méthode égale à post.
Pour que les choses soient aussi simples que possible, nous avons uniquement une entrée de fichier et un bouton d'envoi. Notez que nous avons défini le nom de l'entrée du fichier sur "fupload". Nous allons bientôt utiliser cette valeur pour déterminer si la page a été postée en retour.
Tout en haut de votre page index.php, avant la déclaration du doctype, collez ce qui suit:
Allons-y pas à pas.
Supposons qu'un utilisateur choisit un fichier appelé "myPics.zip".
Ensuite, décomposons le nom du fichier en deux parties: le nom et l’extension..
$ name = explode ('.', $ nomfichier); $ target = 'extrait /'. $ name [0]. '-' temps() . '/';
Continuant avec notre exemple de fichier "myPics.zip" - $ name [0] sera égal à "myPics". $ name [1] sera égal à "zip".
Ensuite, nous créons une nouvelle variable appelée "$ target". Ce sera l'emplacement où notre fichier est enregistré. Pour que les fichiers d'un autre utilisateur portant le même nom "myPics" ne soient pas écrasés, nous devons nous assurer que les fichiers sont enregistrés dans un emplacement unique. Pour accomplir cette tâche, nous allons implémenter la fonction "time ()". Si nous ajoutons cette valeur au nom du fichier téléchargé, nous pouvons être sûrs que nous aurons un nom de dossier unique.!
$ target = "extract / myPics-02151985 /"
Immédiatement après votre variable $ target, collez ce qui suit:
$ shared_types = array ('application / zip', 'application / x-zip-compressé', 'multipart / x-zip', 'application / s-compressé'); foreach ($ acceptés_types comme $ mime_type) if ($ mime_type == $ type) $ okay = true; Pause;
Malheureusement, Safari et Chrome n'enregistrent pas de type pour les fichiers zip. Cela crée un problème pour nous. Après quelques recherches, je n'ai pas pu trouver de solution simple - sans utiliser une extension (PEAR). Au lieu de cela, nous allons nous assurer que le nom du fichier se termine au moins par "zip". Il convient de noter que ce n'est pas sûr à 100%. Que se passe-t-il si l'utilisateur a téléchargé un type de fichier différent qui s'est terminé par "zip"? N'hésitez pas à offrir des recommandations! :)
$ ok = strtolower ($ name [1]) == 'zip'? vrai faux;
Ensuite, nous vérifierons si $ okay est faux. Si c'est le cas, nous savons qu'un fichier 'zip' n'a pas été choisi. Dans de tels cas, nous dirons à PHP de mourir.
if (! $ okay) die ("Veuillez choisir un fichier zip, factice!");
mkdir ($ target); $ saved_file_location = $ target. $ nom de fichier; if (move_uploaded_file ($ source, $ saved_file_location)) openZip ($ saved_file_location); else die ("Il y avait un problème. Désolé!");
Créez une nouvelle page et enregistrez-la sous "functions.php". Maintenant, ajoutez le code suivant:
open ($ file_to_open); if ($ x === true) $ zip-> extractTo ($ target); $ zip-> close (); unlink ($ file_to_open); else die ("Il y avait un problème. Veuillez réessayer!"); ?>
Cette fonction acceptera un paramètre: $ file_to_open. Ce paramètre contient l'emplacement du fichier zip que nous essayons d'extraire!
Rappelez-vous - nous avons créé notre nouveau fichier 'functions.php', mais nous devons l'inclure! Ajoutez ce qui suit en haut de votre page 'index.php', juste après la balise PHP d'ouverture.
require_once 'functions.php';
Ce que nous avons jusqu'à présent fonctionne à merveille! Mais, juste pour vous donner quelques retours, analysons le nouveau répertoire et en renvoyons le contenu. Vous devez supprimer ce prochain bloc de code de votre projet. C'est seulement pour les tests. Si vous souhaitez le conserver, renvoyez les informations dans la balise body..
$ scan = scandir ($ target. $ name [0]); impression '
Je ne reviendrai pas trop sur cette dernière partie car elle est inutile. Toutefois, si vous souhaitez une explication complète, veillez à regarder le screencast associé! Pour résumer rapidement, ce dernier script analyse notre nouveau répertoire et renvoie une liste non ordonnée contenant le contenu..
Pas trop dur, hein? C'est une fonctionnalité intéressante qui peut facilement être implémentée dans vos projets. Que pensez-vous de la sécurité lors du téléchargement de fichiers zip? Comment pouvons-nous être sûrs que le contenu du fichier zip ne soit pas dangereux? J'aimerais entendre l'opinion de chacun sur ces implications pour la sécurité. S'il n'est pas traité correctement, un pirate informatique pourrait causer de graves dommages à votre serveur. Parlons-en! Il est possible de rechercher des types de fichiers dangereux (fichiers .htaccess) et de les supprimer..
'; pour ($ 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]. ' '; impression ''; ?>Comment télécharger et ouvrir des fichiers Zip avec PHP Télécharger un fichier Zip