Como subir y descromprimir un archivo en PHP

by ryudice on October 15, 2009

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.

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Twitter

No related posts.

Leave a Comment

Get Adobe Flash playerPlugin by wpburn.com wordpress themes

PensandoEnCodigo is Digg proof thanks to caching by WP Super Cache