ThemeForest tiene una buena característica; Permite a los autores cargar archivos zip que contienen capturas de pantalla de sus temas. Una secuencia de comandos luego extrae estos archivos y muestra las imágenes en consecuencia. Aunque dudo que los desarrolladores hayan usado PHP para realizar esta tarea ... eso es lo que vamos a usar!
Siempre que permita que sus usuarios carguen archivos, debe configurar el "enctype" de la etiqueta de formulario igual a "multipart / form-data". A continuación, estableceremos la acción igual a la misma página, y el método igual a la publicación.
Para mantener las cosas tan barebones como sea posible, solo tenemos una entrada de archivo y un botón de envío. Tenga en cuenta que hemos establecido el nombre de la entrada del archivo en "fupload". Pronto usaremos este valor para determinar si la página se ha publicado o no..
En la parte superior de su página index.php, antes de que se haya declarado el doctype, pegue lo siguiente:
Vamos a ir paso a paso..
Supongamos que un usuario elige un archivo llamado "myPics.zip".
A continuación, vamos a explotar el nombre del archivo en dos partes: el nombre y la extensión.
$ nombre = explotar ('.', $ nombre de archivo); $ target = 'extraído /'. $ nombre [0]. '-'. hora() . '/';
Continuando con nuestro archivo de ejemplo "myPics.zip", $ nombre [0] será igual a "myPics". $ nombre [1] será igual a "zip".
A continuación, creamos una nueva variable llamada "$ target". Esta será la ubicación donde se guardará nuestro archivo. Con el fin de garantizar que un usuario diferente con el mismo nombre de "myPics" no tenga sus archivos sobrescritos, debemos asegurarnos de que guardamos los archivos en una ubicación única. Para realizar esta tarea, implementaremos la función "time ()". Si agregamos este valor al nombre del archivo cargado, podemos estar seguros de que terminaremos con un nombre de carpeta único!
$ target = "extraído / myPics-02151985 /"
Inmediatamente después de su variable $ target, pegue lo siguiente:
$ accept_types = array ('application / zip', 'application / x-zip-comprimido', 'multipart / x-zip', 'aplicación / s-comprimido'); foreach ($ accept_types como $ mime_type) if ($ mime_type == $ type) $ okay = true; descanso;
Desafortunadamente, Safari y Chrome no registran un tipo para archivos zip. Esto crea un problema para nosotros. Después de un poco de investigación, no pude encontrar una solución fácil, sin usar una extensión (PEAR). En su lugar, nos aseguraremos de que el nombre del archivo al menos termine en "zip". Cabe señalar que esto no es 100% seguro. ¿Qué pasa si el usuario subió un tipo de archivo diferente que terminó en 'zip'? Siéntase libre de ofrecer recomendaciones! :)
$ okay = strtolower ($ name [1]) == 'zip'? verdadero Falso;
A continuación, verificaremos si $ está bien es falso. Si es así, sabemos que no se eligió un archivo 'zip'. En tales casos, le diremos a PHP que muera..
if (! $ okay) die ("Por favor, elija un archivo zip, dummy!");
mkdir ($ target); $ saved_file_location = $ target. $ nombre de archivo; if (move_uploaded_file ($ source, $ saved_file_location)) openZip ($ saved_file_location); else die ("Hubo un problema. ¡Lo siento!");
Crea una nueva página y guárdala como "functions.php". Ahora agregue el siguiente código:
abierto ($ file_to_open); if ($ x === true) $ zip-> extractTo ($ target); $ zip-> close (); unlink ($ file_to_open); else die ("Hubo un problema. ¡Inténtalo de nuevo!"); ?>
Esta función aceptará un parámetro: $ file_to_open. Este parámetro contendrá la ubicación del archivo zip que estamos intentando extraer.!
Recuerde: hemos creado nuestro nuevo archivo 'functions.php', ¡pero debemos incluirlo! Agregue lo siguiente a la parte superior de su página 'index.php', justo después de abrir la etiqueta PHP.
require_once 'functions.php';
¡Lo que tenemos hasta ahora funciona perfectamente! Pero, solo para darte un comentario, escaneamos el nuevo directorio y hacemos eco de los contenidos. Debes eliminar el siguiente bloque de código de tu proyecto. Es solo para pruebas. Si desea conservarlo, haga eco de la información dentro de la etiqueta del cuerpo.
$ scan = scandir ($ target. $ name [0]); impresión '
No repasaré esta última parte demasiado, ya que es innecesario. Sin embargo, si desea una explicación completa, asegúrese de ver el screencast asociado. Para resumir rápidamente, este último script escanea nuestro nuevo directorio y elimina una lista desordenada que contiene el contenido.
No es demasiado difícil, ¿eh? Es una característica interesante que se puede implementar fácilmente en sus proyectos. ¿Qué piensas de la seguridad a la hora de subir archivos zip? ¿Cómo podemos estar seguros de que el contenido del archivo zip no es perjudicial? Me encantaría escuchar la opinión de todos sobre estas implicaciones de seguridad. Si no se maneja adecuadamente, un pirata informático podría causar un daño grave a su servidor. ¡Vamos a discutirlo! Es posible buscar tipos de archivos peligrosos (archivos .htaccess) y eliminarlos.
'; para ($ 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]. ' '; impresión ''; ?>Cómo subir y abrir archivos zip con PHP Subir un archivo zip