Compresión de archivos utilizando las funciones Bzip2 en PHP
Adrian Beneficios de la compresión
La compresión nos posibilita almacenar mayor cantidad de ficheros dentro de nuestros discos duros, muy útil a la hora de realizar los resguardos de la información. Reduce nuestro tiempo de descarga de ficheros en la red y disminuye el tráfico en las mismas.
¿Qué es Bzip2?
Bzip2 es un gran algoritmo de alta calidad de compresión de datos.
Generalmente hace que los ficheros comprimidos sean entre un 10 y 15 por ciento más pequeños que las mejores técnicas disponibles de compresión. Su patente es libre por lo cual bzip2 esta disponible gratuitamente al igual que su código fuente para el uso de todo el mundo. El sitio oficial se encuentra en http://www.bzip.org y su código puede ser descargado desde la siguiente dirección http://www.bzip.org/downloads.html.
Las funciones bzip2 son usadas en PHP para leer y escribir de forma transparente, ficheros comprimidos bzip2 (.bz2), en nuestro caso solo trataremos con ellas para comprimir y descomprimir ficheros bzip2.
Configurando el php.ini
El soporte para bzip2 en PHP no está habilitado por defecto por lo tanto tendremos que habilitar la opción en el fichero de configuración del php (php.ini). Este se hace eliminando el punto y coma que se encuentra delante de la línea extension=php_bz2.so.
Comprimiendo el fichero
Supongamos que en la variable $archivo_name tenemos guardado el nombre de nuestro fichero a compactar. El siguiente código es el encargado de comprimir el fichero.
-
/*
-
Abrimos el fichero que deseamos comprimir en modo de lectura binaria
-
*/
-
/*
-
Luego leemos el contenido completo del fichero y lo almacenamos en la
-
variable $contenido
-
*/
-
/*
-
Cerramos el fichero
-
*/
-
/*
-
Aquí esta la parte importante del asunto, bzcompress comprime una cadena devolviéndonos los datos codificados como bzip2, el segundo parámetro es opcional y nos indica el nivel de compresión que deseamos, el mismo debe ser un número entre 1 y 9; siendo 9 el máximo nivel de compresión pero usando más recursos para ejecutar la tarea,
-
el nivel por defecto es 4
-
*/
-
/*
-
Ahora en este caso como tratamos de abrir el fichero para escritura se trunca en longitud cero si existe y sino trata de crearlo con el nombre original del fichero mas .bz2, es decir que si tenemos como nombre de fichero a comprimir ‘mifichero.doc’ el fichero comprimido
-
tendrá el nombre de ‘mifichero.doc.bz2’
-
*/
-
/*
-
Escribimos en el fichero lo datos comprimidos
-
*/
-
/*
-
Y finalmente cerramos el fichero y ya tenemos nuestro archivo
-
comprimido en el formato bzip2
-
*/
Descomprimiendo el fichero
Ahora bien, en este caso supongamos que tenemos en la variable $archivo_fuente el nombre de nuestro fichero comprimido y que en la variable $archivo_destino esta el nombre que deseamos tenga el fichero cuando se descomprima. El siguiente código es el encargado de descomprimir nuestro fichero.bz2
-
/*
-
Abrimos el fichero que tiene el formato bzip2 que deseamos descomprimir en modo de lectura binaria
-
*/
-
/*
-
Luego leemos el contenido completo del fichero y lo almacenamos en la variable $contenido
-
*/
-
/*
-
Cerramos el fichero
-
*/
-
/*
-
Aquí esta la parte importante del asunto, bzdecompress descomprime una cadena que contiene datos codificados en el formato bzip2, bzdecompress también acepta un segundo parámetro opcional, cuando el parámetro es TRUE, se usa un algoritmo alternativo que consume menos memoria (la memoria máxima requerida esta cerca de los 2300K) pero
-
trabajara aproximadamente a la mitad de la velocidad
-
*/
-
/*
-
Ahora en este caso como tratamos de abrir el fichero para escritura se trunca en longitud cero si existe y sino se trata de crear con el nombre que se encuentra en la variable $archivo_destino
-
*/
-
/*
-
Escribimos en el fichero los datos descomprimidos
-
*/
-
/*
-
Y finalmente cerramos el fichero y ya tenemos nuestro archivo sin compresión.
-
*/
Si experimentas problemas a la hora de leer y escribir a ficheros y estas usando la versión de PHP como módulo para el servidor, recuerda que debes asegurar que los ficheros y directorios que estas usando son accesibles al proceso servidor.
Posted in PHP |
No Comments »
