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";
11 Comentarios | deja el tuyo





Comprimir archivos con PHP http://dlvr.it/2mhl7
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.
Muy bueno el tuto y además muy útil ya lo había visto en tu web pero no le preste atención hasta hoy que lo necesite.
Sabes tu si los webhosting como hostgator,tienen habilitado esta libreria? en un dado caso no la tengan activa, podrias decirme como activarla o instalarla.
De antemano muchas gracias.
De gran ayuda!
No dudes en pasarte: http://fangosto.blogspot.com/
Saludos
Gracias por el aporte, muy buen, en vdd me has salvado, muy bien estructurado y sencillo de entender
Me sucede que desaparece la extensión del fichero comprimido.
Saben cómo puedo solucionarlo?
Muchas gracias.