Portada » Lenguaje PHP » Crear archivo zip de multiples archivos cargados usando PHP

Crear archivo zip de multiples archivos cargados usando PHP

Crear archivo zip de multiples archivos cargados usando PHP. Hoy en día los ficheros ZIP siguen siendo indudablemente el formato de archivo más popular entre las plataformas de escritorio y las de online. Como programadores debemos estar a la vanguardia de cómo podemos manejarlo completamente.

En este artículo veremos cómo crear un fichero Zip de varios archivos cargados mediante un formulario, usando el lenguaje PHP y funciones que maneja este lenguaje.

Crear archivo zip de multiples archivos cargados usando PHP

¿Cómo funciona este sistema de creación de ficheros ZIP?

Primero. – Vamos a tener que crear un formulario HTML para iniciar la carga de múltiples archivos. Sin embargo, al cargar correctamente, esos archivos se comprimirán como un solo archivo formato ZIP usando PHP para el proceso.
Segundo. – Para cargar varios archivos, el formulario HTML debe contener una matriz de campos de entrada de archivo. Por lo tanto, esto servirá para cargar múltiples archivos.
Tercero. – Una vez subido los ficheros y estando almacenados en la carpeta «Subidas» se creará el fichero ZIP y además nos permitirá la descarga del fichero ZIP.

Crear archivo zip de multiples archivos cargados usando PHP
Crear archivo zip de multiples archivos cargados usando PHP

En un ejemplo anterior hemos creado un fichero ZIP. Sin embargo, ahora vamos a usar el conocimiento que hemos obtenido del artículo anterior para comprimir múltiples archivos.

En este ejemplo de sistema de carga, hay dos archivos principales que debemos de considerar, tenemos por ejemplo al index.php y CargarFicheros.php.

a) Archivo index.php. – Es el archivo principal que contiene el código HTML por el cual muestra el formulario con opciones para seleccionar múltiples archivos y cargarlos a la vez.

b) Fichero CargarFicheros.php. – Es el archivo que procesa la información enviada por el formulario HTML y contiene un script PHP para subir los archivos seleccionados en el formulario y lo almacena en una carpeta predeterminada en el servidor «Subidas» y a la vez tiene la función de crear un archivo Zip usando funciones propias del lenguaje PHP.

Crear archivo Zip de múltiples archivos: Configuración

Este sistema está escrito en PHP y posee una configuración predeterminada. Sin embargo, nosotros podemos personalizar este código a nuestra necesidad, por ejemplo:

Configurar la ruta de destino donde se deben cargar los archivos y se va a crear el Zip comprimido. Por lo tanto, en este ejemplo, el archivo Zip se creará y almacenará en la carpeta subidas y se encuentra en la raíz de nuestro sistema.

Si la cargar de ficheros y la creación del archivo ZIP fue todo un éxito, se mostrará un mensaje de proceso exitoso. Además, se generará un enlace de descarga que será visible en el navegador para que el usuario pueda descargarlo sin problemas.

¿Qué usos puedo darle a este sistema de comprimir los archivos cargados en un Zip?

Recordemos que PHP es un lenguaje dinámico y el uso de este sistema puede darse en varios escenarios, a continuación, detallaremos algunos ejemplos de uso.

  • Exportación de galería de fotos en formato ZIP o cualquier tipo de álbum digital y la información podrían ser descargados en forma de Zip comprimido, agilizando el proceso de exportación.
  • En una empresa posee un portal web y en una categoría posee la opción de «Trabaja con nosotros«, en el cual muestra un formulario para que el usuario suba su currículo vitae y este se comprima en un formato Zip, que puede ser descargado por el responsable de área. Además, podría ser una estrategia para limitar ese archivo y no pueda ejecutarse si se tratase de un virus.
  • Las tiendas de comercio electrónico por lo general venden libros y/o productos intelectuales que son empaquetados en formato Zip, que puede contener varios archivos del producto.

Bibliotecas y funciones existentes para crear ZIP PHP

Para crear ficheros en formato ZIP existen muchas bibliotecas de PHP, JavaScript, plugins disponibles en el mercado para crear ficheros de tipo ZIP.

Sin embargo, JSZip es una biblioteca de JavaScript que ayuda a crear, leer y editar archivos Zip. Por lo tanto, esta biblioteca construye el archivo Zip, usando la API de la biblioteca. Además, crea la carpeta de destino Zip de manera automática para almacenar el archivo Zip creado en el servidor.

¿Qué clase usa este sistema para crear archivos ZIP?

Para este ejemplo hemos utilizado la clase «ZipArchive» propia de PHP para crear un archivo Zip que contiene varios archivos cargados por el formulario.

Crear archivo zip de multiples
Crear archivo zip de multiples

Descripción del sistema carga y creación de ficheros ZIP: Index.php

En este fichero vamos a crear la interfaz HTML y formulario para cargar múltiples archivos. También, contiene el script HTML para mostrar los vínculos de descarga para el Zip creado con PHP.

Para darle más estética al ejemplo, usaremos la librería bootstrap para desarrollar una interfaz profesional de carga de archivos. Por lo tanto, agregada la propiedad múltiple HTML predeterminada, a continuación, mostraremos el script.

Crear archivo zip de multiples
Crear archivo zip de multiples
<div class="container">
 
  <div class="row">
    <div class="col-12 col-md-12"> 
      <!-- Contenido -->
        
<br>
<?php include 'CargarFicheros.php'; ?>
<div class="row">
<div class="page-container row-12">
<h4 class="col-12 text-center mb-5">
<a href="https://baulphp.com/crear-archivo-zip-de-multiples-archivos-cargados-usando-php">Crear archivo zip de multiples archivos cargados usando PHP</a>
</h4>
<div class="row-8 form-container">
<?php 
if(!empty($error)) { 
?>
    <p class="error text-center"><?php echo $error; ?></p>
<?php 
}
?>
<?php 
if(!empty($success)) { 
?>
    <p class="success text-center">
Archivos cargados con éxito y comprimidos en formato zip
</p>
<p class="success text-center">
<a href="Subidas/<?php echo $success; ?>" target="_blank">Haga clic aquí para descargar el archivo zip</a>
</p>
<?php 
}
?>
<form action="" method="post" enctype="multipart/form-data">
<div class="input-group">
    <div class="input-group-prepend">
        <input type="submit" class="btn btn-primary" value="Subir Ficheros">
    </div>
    <div class="custom-file">
        <input type="file" class="custom-file-input" name="img[]" multiple>
        <label class="custom-file-label" >Elija el archivo</label>
    </div>
</div>
</form>
                
    </div>
</div>
</div>

Crear zip usando PHP ZipArchive: CargarFicheros.php

ZipArchive es la clase de PHP que trabaja con archivos zip. Sin embargo, les recomiendo que la extensión zip está habilitada en la configuración de PHP de su servidor contratado.

Crearemos la instancia de ZipArchive que se utiliza para invocar métodos para crear un archivo zip correctamente.

Si envian el formulario y no se elige ningun archivo, devolverá el mensaje de error de validación en el lado del servidor.  A continuacion, mostraremos en contenido del fichero «CargarFicheros.php«.

Validacion si el usuario no carga ningun fichero
Validacion si el usuario no carga ningun fichero
<?php
if ($_FILES && $_FILES['img']) {
    
if (!empty($_FILES['img']['name'][0])) {

$zip = new ZipArchive();
// Ruta de archivos cargados
$zip_name = getcwd() . "/Subidas/subida_" . time() . ".zip";

// Crear fichero zip
if ($zip->open($zip_name, ZipArchive::CREATE) !== TRUE) {
    $error .= "Lo sentimos, la creación de ZIP no está funcionando actualmente.<br/>";
}
// Contamos la cantidad de archivos subidos en el formulario
$imageCount = count($_FILES['img']['name']);
for($i=0;$i<$imageCount;$i++) {

    if ($_FILES['img']['tmp_name'][$i] == '') {
        continue;
    }
    $newname = date('YmdHis', time()) . mt_rand() . '.jpg';

    // Mover archivos a zip.
    $zip->addFromString($_FILES['img']['name'][$i], file_get_contents($_FILES['img']['tmp_name'][$i]));

    // Mover archivos a la carpeta de destino.
    move_uploaded_file($_FILES['img']['tmp_name'][$i], './Subidas/'.$newname);
}
$zip->close();

// Crear opción de enlace HTML para descargar zip
$success = basename($zip_name);
} else {
// Mostramos error si no seleccionamos archivos alguno
$error = '<strong>Error!! </strong> Por favor seleccione archivos.';
}
}

Crear archivo Zip de múltiples archivos cargados de PHP y la respuesta.

Si todo el proceso resulto exitoso mostrara un mensaje de éxito y/o fracaso si fuera el caso de este ejemplo en PHP. En la respuesta de éxito, se mostrará el mensaje de texto con una opción para descargar el archivo Zip creado. Veamos la captura de pantalla en los dos casos.

Fciheros cargados y comprimidos correctamente
Fciheros cargados y comprimidos correctamente

CONCLUSIÓN DEL SISTEMA

Como han podido observar este código se usa para crear un archivo Zip usando el lenguaje PHP y será útil para usted mientras desarrolla su proyecto web. La creación de archivos en PHP es apoyada por las funciones incorporadas y clases disponibles en su núcleo y sus definiciones podemos encontrarlas en su página oficial.

También, hemos mencionado los posibles escenarios donde podemos usar este ejemplo y será bastante útil la implementación.

Además, es uso de librerías externas como el «bootstrap» proporcionado una interfaz profesional en nuestro proyecto. Sin embargo, si desea que sea sencillo y sin interfaz profesional, puede separar la biblioteca de bootstrap del ejemplo y usar la estructura base para implementarlo en sus necesidades.

Para terminar el artículo, espero que este artículo le sea útil en sus proyectos y experticias que pudieran tener. Además, ante cualquier duda, no dudes en escribir en los comentarios del artículo.

[sociallocker id=5099] [/sociallocker]

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad