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.
