Hace unos dias estaba programando un plugin de wordpress en el que necesitaba subir una gran cantidad de archivos al mismo tiempo, la solucion que pense fue subirlos dentro de un zip y luego descomprimirlos en el servidor. Luego de una hora de investigacion esta es la solucion a la que llegue:
Paso 1. Creando el Formulario
Creemos un nuevo archivo php llamado subir_zip.php o como ustedes deseen y luego creamos nuestro formulario html para subir los archivos.
<html>
<head><title>Subir archivos zip</title></head>
<body>
<form enctype=”multipart/form-data” action=”" method=”post”>
<input type=”file” name=”archivo” /><br />
<input type=”submit” value=”Subir” />
</form>
</body>
</html>
Explicacion:
Lo unico complicado de este codigo es el atributo enctype que lleva nuestro tag form, esto anda mas quiere decir que vamos a enviar datos binarios a traves del formulario, todo formulario en el que suban archivos debe llevar este tipo de enctype. El action del formulario lo dejamos vacio para que postee a si mismo.
Paso 2. Creando el codigo
Este es el codigo que vamos a utilizar para procesar el archivo y descromprimirlo, agreguenlo antes del codigo HTML.
<?php
//Revisamossi el archivo fue subido
if ( isset ($_FILES["archivo"]))
{
//Si el archvio fue subido entonces lo guardamos en una variable
$uploaded_file = $_FILES["archivo"];
//Creamos una nueva insancia del la clase ZipArchive() para el manejo de zips
$zip=new ZipArchive();
//Guardamos el archivo subido, ya que al subirse solo se guarda en el directorio temporal del apache
if(move_uploaded_file($uploaded_file['tmp_name'], $uploaded_file['name'])){
//Abrimos el archivo subido
$res=$zip->open( $uploaded_file['name']);
if($res===true)
{
//Lo extraemos y lo cerramos pero solamente si se pudo abrir, para eso es el if
$zip->extractTo(‘.’);
$zip->close();
}
}
}
?>
Explicación
El código esta comentado, si no son suficiente los comentarios por favor pueden poner preguntas en los comentarios del post.
Resultado Final
Y este es todo el código:
<?php
//Revisamossi el archivo fue subido
if ( isset ($_FILES["archivo"]))
{
//Si el archvio fue subido entonces lo guardamos en una variable
$uploaded_file = $_FILES["archivo"];
//Creamos una nueva insancia del la clase ZipArchive() para el manejo de zips
$zip=new ZipArchive();
//Guardamos el archivo subido, ya que al subirse solo se guarda en el directorio temporal del apache
if(move_uploaded_file($uploaded_file['tmp_name'], $uploaded_file['name'])){
//Abrimos el archivo subido
$res=$zip->open( $uploaded_file['name']);
if($res===true)
{
//Lo extraemos y lo cerramos pero solamente si se pudo abrir, para eso es el if
$zip->extractTo(‘.’);
$zip->close();
}
}
}
?>
<html>
<head><title>Subir archivos zip</title></head>
<body>
<form enctype=”multipart/form-data” action=”" method=”post”>
<input type=”file” name=”archivo” /><br />
<input type=”submit” value=”Subir” />
</form>
</body>
</html>
En una situacion del mundo real, desearan validar si el archivo que se esta subiendo en realidad es un zip.
No related posts.