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



El ejemplo está excelente, haber si te das una vuelta por mi blog, también hago entrevistas.
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.