En este artículo comentaremos como descomprimir los ficheros que hemos comprimido con las funciones de Compresión de ficheros con PHP a GZIP.

Este ejemplo descomprimiría un archivo con formato gzip comprimido mediante gzencode, o cualquier aplicación que comprima ficheros a gzip (como el comando gzip de Unix) y hace los siguientes pasos:

  1. Inicializa variables, la primera ($iTamMaxDestino) es el tamaño máximo del fichero descomprimido, si el tamaño del fichero resultante fuera mayor, se truncaría, la segunda ($sNombre) es el nombre alternativo del archivo descomprimido. En caso de que el archivo sea del tipo nombre.ext.gz el nombre del fichero resultante sería nombre.ext independientemente del valor de esta variable
  2. Abre el fichero comprimido con gzopen / gzclose y recoge del fichero comprimido la cadena del fichero descomprimido con gzread
  3. Vuelca el resultado en un fichero en el mismo directorio que el original

Si el fichero que quisiéramos comprimir se hubiera creado con gzcompress ó gzdeflate, en vez de abrir el fichero como un fichero comprimido, deberíamos de abrirle en binario para recoger sus datos (realmente no es un fichero comprimido ya que le faltan las cabeceras indicadoras, realmente es un fichero con una cadena comprimida) y descomprimir estos con gzuncompress ó gzinflate según el caso, de forma que habría que reemplazar esta parte:

$iTamMaxDestino = 4000000; // 4 Megas
$sNombre = "McAnam.des";

if ( ! $fOrigen = @gzopen($sFichOrigen, "rb"))
return false;
$sDesBin = gzread($fOrigen, $iTamMaxDestino);
gzclose($fOrigen);



Para descomprimir un fichero comprimido con gzcompress:
$sNombre = "McAnam.des";

if ( ! $fOrigen = @fopen($sFichOrigen, "rb"))
return false;
$sOriGZ = fread($fOrigen, filesize($sFichOrigen));
fclose($fOrigen);

$sDesBin = gzuncompress($sOriGZ);


Para descomprimir un fichero comprimido con gzdeflate:

$sNombre = "McAnam.des";

if ( ! $fOrigen = @fopen($sFichOrigen, "rb"))
return false;
$sOriGZ = fread($fOrigen, filesize($sFichOrigen));
fclose($fOrigen);

$sDesBin = gzinflate($sOriGZ);

No hay comentarios: