php

Extraer zip con PHP

En este post vamos a ver cómo descomprimir archivos zip en PHP. Veremos 3 ejemplos:

  • Cómo descomprimir un archivo
  • Cómo extraer solamente una lista de archivos dentro del zip
  • Cómo extraer un archivo zip subido

Recuerda que si quieres ver cómo crear archivos zip con PHP puedes mirar este post.

Descomprimir archivo zip

En la forma más simple, se crea una instancia de la clase ZipArchive, se invoca al método open con la ubicación del archivo zip y si no hay errores al abrirlo, se invoca al método extractTo que toma como argumento la ubicación de los archivos descomprimidos.

<?php
/**
 * Extraer un zip con PHP
 * Ejemplo 1
 *
 * @author parzibyte
 * Más tutoriales en: parzibyte.me/blog
 */$zip = new ZipArchive;
$rutaArchivo = __DIR__ . "/documentos.zip";
$directorioSalida = __DIR__ . "/documentos";
if (!$zip->open($rutaArchivo)) {
    exit("No se puede abrir el archivo $rutaArchivo");
}

$zip->extractTo($directorioSalida);
$zip->close();

En caso de que todo vaya bien, el contenido del zip será extraído en la ubicación que indique $directorioSalida.

Extraer solo determinados archivos

Es posible que se necesite extraer solo algunos archivos, no todo el contenido del zip.

Para ello, el método extractTo acepta un segundo argumento: un array que indica la lista de archivos necesarios.

<?php
/**
 * Extraer un zip con PHP
 * Ejemplo 2
 *
 * @author parzibyte
 * Más tutoriales en: parzibyte.me/blog
 */$zip = new ZipArchive;
$rutaArchivo = __DIR__ . "/documentos.zip";
$directorioSalida = __DIR__ . "/documentos";
$archivosRequeridos = ["6-imagenes.pdf", "imágenes/C Reserved words.png"];
if (!$zip->open($rutaArchivo)) {
    exit("No se puede abrir el archivo $rutaArchivo");
}

$zip->extractTo($directorioSalida, $archivosRequeridos);
$zip->close();

Nota: la lista está definida con la notación corta, pero podría ser igualmente con array.

En el código ejemplifico cómo extraer solo algunos archivos incluso si están dentro de una carpeta del zip.

Subir archivo y extraer su contenido

Hay que tener cuidado con esto, pero si tu app lo requiere, esto es totalmente posible.

Primero debes hacer un formulario para subir el archivo.

He tomado el código de este post para el formulario y el procesamiento.

Por lo tanto, el código HTML queda así:

<!--
    Tomado de: https://parzibyte.me/blog/2018/11/27/subir-archivo-php-metodo-simple/
    El atributo enctype es importante, si no, no nos permitirá subir el archivo
    
-->
<form action="3-subir.php" method="post" enctype="multipart/form-data">
    <input type="file" name="archivo">
    <br><br>
    <input type="submit" value="Enviar">
</form>

El archivo será procesado en 3-subir.php. Simplemente hay que mover el archivo subido y extraerlo en una carpeta.

En este caso, la carpeta tendrá un nombre aleatorio sacado con uniqid, solo es en este caso, tú puedes llamarlo como quieras o ponerlo en una carpeta fija.

<?php
/*
Subir archivo a servidor con PHP
@author parzibyte
 */# La carpeta en donde guardaremos los archivos, en este caso es "subidas" pero podría ser
# cualqueir otro, incluso podría ser aquí mismo sin subcarpetas
$rutaDeSubidas = __DIR__ . "/zips";
# Crear si no existe
if (!is_dir($rutaDeSubidas)) {
    mkdir($rutaDeSubidas, 0777, true);
}
# Tomar el archivo. Recordemos que "archivo" es el atributo "name" de nuestro input
$informacionDelArchivo = $_FILES["archivo"];
# La ubicación en donde PHP lo puso
$ubicacionTemporal = $informacionDelArchivo["tmp_name"];
#Nota: aquí tomamos el nombre que trae, pero recomiendo renombrarlo a otra cosa usando, por ejemplo, uniqid
$nombreArchivo = $informacionDelArchivo["name"];
$nuevaUbicacion = $rutaDeSubidas . "/" . $nombreArchivo;
# Mover
$resultado = move_uploaded_file($ubicacionTemporal, $nuevaUbicacion);
if (!$resultado) {
    echo "Error al subir archivo";
    exit;
}
# Hasta aquí, el zip está bien. Vamos a extraerlo
$zip = new ZipArchive;
$directorioSalida = $rutaDeSubidas . "/" . uniqid();
if (!$zip->open($nuevaUbicacion)) {
    exit("No se puede abrir el archivo $rutaArchivo");
}

$zip->extractTo($directorioSalida);
$zip->close();
echo "Archivo $nuevaUbicacion descomprimido en $directorioSalida";

Conclusión

Así es como se pueden extraer o descomprimir archivos zip en PHP. Después de extraerlos puedes verificar el contenido entrando al directorio, comprobando si existen determinados archivos, etcétera.

Si quieres ver el código completo y listo para probar, mira el repositorio en GitHub.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.