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";

11 Comentarios | deja el tuyo

oct, 15 2008 - 12:11 pm

Iconos de compresión para proyectos linuxeros

Acabo de ver este pack de iconos de compresión para proyetos linuxeros, y me han parecido geniales:

Descargar pack
Lo he visto en: gEEK THE pLANET

7 Comentarios | deja el tuyo

ago, 06 2008 - 3:49 pm

pngcrush, optimiza tus imágenes PNG

pngcrush es un programa que nos permite, entre otras cosas, reducir el tamaño de las imágenes en formato PNG. Se encuentra disponible en los repositorios de prácticamente todas las distros, por lo que puedes instalarlo en Ubuntu o Debian así:

sudo apt-get install pngcrush

Uso:

pngcrush -rem -reduce -brute entrada.png salida.png

Donde:

  • -rem = remueve la información adicional de la imagen
  • -reduce = indica que se realizará una reducción del tamaño de la imagen
  • -brute = utiliza  un método de fuerza bruta que prueba 114 filtros y métodos compresión, y selecciona el que mejor comprima la imagen
  • entrada.png = es la imagen original
  • salida.png = el nombre de la imagen resultado de la compresión

Personalmente me ha gustado mucho, aunque el comando sea bastante largo 8-) Yo te recomiendo crear un alias que nos facilite las cosas:

alias pngc = ‘pngcrush -rem -reduce -brute’

De tal manera que solo debamos hacer algo como:

pngc entrada.png salida.png

Recuerda además que si deseas que este alias sea permanente, debes añadirlo en tu archivo .bashrc, que se encuentra en tu carpeta home ;)

Me enteré de el leyendo evelio.blog()

5 Comentarios | deja el tuyo