gentoo linux, java, software libre y otras hierbas
Jul, 18 2010 - 12:54 am

Comprimir archivos con PHP

Zlib es una librería que proporciona funciones que nos permiten realizar tareas de compresión y descompresión usando el formato GZIP. En esta entrada vamos a ver algunos ejemplos sencillos de compresión de archivos usando dicha librería, y además veremos cómo funcionan las librerías adicionales para comprimir archivos en ZIP y Bunzip… aunque también existen otros formatos disponibles como rar, lzf y phar.

Comprimir y descomprimir usando el formato GZIP

Este es un ejemplo básico en donde se comprime y descomprime un archivo:

function descomprimir($origen, $destino) {
  $string = implode("", gzfile($origen));
  $fp = fopen($destino, "w");
  fwrite($fp, $string, strlen($string));
  fclose($fp);
} 

function comprimir($origen, $destino) {
  $fp = fopen($origen, "r");
  $data = fread ($fp, filesize($origen));
  fclose($fp);
  $zp = gzopen($destino, "w9");
  gzwrite($zp, $data);
  gzclose($zp);
}
comprimir("archivo.txt","archivo.gz");
descomprimir("archivo.gz","archivo2.txt");

Esta es una breve descripción de las funciones para Gzip incluidas en Zlib:

  • gzclose — Cierra un puntero gz-file
  • gzcompress — Comprime una cadena de texto
  • gzencode — Crea una cadena de texto comprimida en gzip
  • gzeof — Verifica si es el fin del archivo en un puntero gz-file
  • gzfile — Lee el contenido de un archivo gzip y lo almacena en un arreglo
  • gzgetc — Obtiene el caracter al que apunta un gz-file pointer
  • gzgets — Obtiene la linea a la que apunta un gz-file pointer
  • gzgetss — Obtiene la linea a la que apunta un gz-file pointer y remueve las etiquetas HTML
  • gzinflate — Descomprime una cadena comprimida
  • gzopen — Abre un archivo gzip

Comprimir usando el formato Bunzip

Aquí un ejemplo muy básico:

function comprimir_bzip($origen, $destino){
    // abrir el archivo en modo escritura
    $bz = bzopen($destino, "w");
    // escribir el contenido del origen
    bzwrite($bz, file_get_contents($filename));
    // cerrar el archivo
    bzclose($bz);
}

Información adicional y lista de las funciones disponibles: PHP: Bunzip.

Comprimir usando el formato ZIP

En este caso se utilizan la clase ZipArchive:

function comprimir_zip($origen, $destino){
    $zip = new ZipArchive();
    if ($zip->open($destino, ZIPARCHIVE::CREATE)!==TRUE) {
        die("Error al crear el archivo");
    }
    $zip->addFile($origen, "/".basename($origen));
    $zip->close();
}

Verificar la existencia de las librerías

Esta es una manera sencilla de verificar si PHP fue compilado con soporte para estas librerías:

if( class_exists('ZipArchive') )
    echo "ZIP: OK\n";
if( function_exists('bzwrite') )
    echo "Bunzip: OK\n";
if( function_exists('gzwrite') )
    echo "gzip: OK\n";

4 Comentarios | deja el tuyo

2 enlaces entrantes

2 Comentarios en “Comprimir archivos con PHP”

  1. Loveless dice:

    El ejemplo está excelente, haber si te das una vuelta por mi blog, también hago entrevistas.

  2. Hola.
    Desde hace un buen tiempo sigo los artículos que escribes, pues lo haces con gran claridad y calidad, además de ser muy útiles.

    Felicitaciones.

¡Déjanos tu comentario!