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-filegzcompress
— Comprime una cadena de textogzencode
— Crea una cadena de texto comprimida en gzipgzeof
— Verifica si es el fin del archivo en un puntero gz-filegzfile
— Lee el contenido de un archivo gzip y lo almacena en un arreglogzgetc
— Obtiene el caracter al que apunta un gz-file pointergzgets
— Obtiene la linea a la que apunta un gz-file pointergzgetss
— Obtiene la linea a la que apunta un gz-file pointer y remueve las etiquetas HTMLgzinflate
— Descomprime una cadena comprimidagzopen
— Abre un archivo gzip
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";y eso es todo, saludos.