Secciones

Descomprimir un archivo zip con php

Inicio » Artículos » Descomprimir un archivo zip con php
La categoría del artículo es
Escrito el 27 May 2008, 01:21


Tanto para comprimir como para descomprimir un archivo zip, podemos hacer uso de un par de librerías que vienen con la instalación de phpMyAdmin y que se encuentran en la carpeta libraries y son los archivos unzip.lib.php y zip.lib.php.

Un ejemplo de como comprimir varios archivos en un zip sería el siguiente:

PHP:
<?php
ini_set("memory_limit","20M");
require_once("zip.lib.php");
require_once("unzip.lib.php");

$zip = new zipfile();
$filename = "1.jpg";
$fsize = @filesize($filename);
$fh = fopen($filename, 'rb', false);
$data = fread($fh, $fsize);             
$zip->addFile($data,$filename);
$filename = "2.jpg";
$fsize = @filesize($filename);
$fh = fopen($filename, 'rb', false);
$data = fread($fh, $fsize);             
$zip->addFile($data,$filename);


$zipcontents = $zip->file();

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"TheZip.zip\"");
header("Content-length: " . strlen($zipcontents) . "\n\n");

// output data
echo $zipcontents;

?>

Mientras para descomprimir podemos ver el siguiente ejemplo:

PHP:
<?php
ini_set("memory_limit","20M");
require_once("zip.lib.php");
require_once("unzip.lib.php");

$zip = new SimpleUnzip();
$filename = "myzippedfile.zip";
$entries = $zip->ReadFile($filename);

foreach ($entries as $entry){
        $fh = fopen($entry->Name, 'w', false);
        fwrite($fh,$entry->Data);
        fclose($fh);
}


?>

El código es muy sencillo de entender con lo que sobran las explicaciones.


Espero tus comentarios...

  1. # tru3n0, May 27, 03:55 AM:

    buena aportación, me la apunto! :)

  2. # Alejandro, Jun 4, 03:23 AM:

    como seria el parametro para descomprimir en un directorio N

    ejemplo que todo se descomprima dentro de tmp/

  3. # Fran García, Jun 4, 11:51 PM:

    Tan solo tendrías que añadir a la instrucción donde se abre el fichero en modo escritura (fopen) la ruta donde quieres escribir el fichero. Algo así:

    fopen(”./tmp/”.$entry->Name,‘w’,false);

    Eso sería todo.

Ayuda Textile