Comprimir y descomprimir archivos Gzip en PHP

Zlib es una librería PHP que nos permite realizar operaciones de creacción y manejo de archivos comprimidos Gzip de una forma sencilla.

Primero de todo tenemos que asegurarnos de tener instalado el módulo Zlib en nuestro servidor. Podemos comprobarlo haciendo:

if ( function_exists('gzwrite') ) { echo "gzip: OK"; }

Si la verificación es correcta, y tenemos el módulo Zlib instalado, ya podemos manejar ficheros Gzip en nuestro servidor mediante PHP.

Y vamos a ver un par de ejemplos sencillos que nos muestran cómo comprimir y descomprimir ficheros Gzip en PHP:

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

function descomprimir($origen, $destino) {
  $string = implode("", gzfile($origen));
  $fp = fopen($destino, "w");
  fwrite($fp, $string, strlen($string));
  fclose($fp);
}
descomprimir("archivo.gz", "archivo2.txt");

Existen más funciones disponibles en la librería Zlib:

gzopen — abre un archivo gzip
gzclose — cierra un puntero gz-file
gzcompress — comprime una cadena de texto
gzinflate — descomprime una cadena previamente comprimida
gzencode — crea una cadena de texto comprimida en gzip
gzeof — verifica si es el fin de fichero (eof) 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 puntero gz-file
gzgets — obtiene la linea a la que apunta un puntero gz-file
gzgetss — obtiene la linea a la que apunta un puntero gz-file y elimina las etiquetas HTML

Más información en php.net