Aunque las Envolturas de
Compresión ofrecen una forma de crear archivos
compatibles con gzip y bz2 en el sistema de archivos local, no
ofrecen un método de compresión generalizado sobre
secuencias de red, ni ofrecen la forma de comenzar con una
secuencia no-comprimida y trasladarse a una comprimida. Para esto,
un filtro de compresión puede ser aplicado sobre cualquier
recurso de secuencia en cualquier momento.
Nota:
Los filtros de compresión no generan
cabeceras ni caracteres finales usados por utilidades de la
lÃnea de comandos como gzip. Sólo
comprimen y descomprimen las porciones significativas de las
secuencias de datos comprimidas.
zlib.deflate (compresión) y
zlib.inflate (descompresión) son
implementaciones de los métodos de compresión
descritos en RFC 1951. El filtro
deflate recibe hasta tres parámetros
pasados como una matriz asociativa.
level describe la intensidad de
compresión (1-9). Números más grandes
producen, por lo general, resultados más pequeños, al
costo de tiempo de procesamiento adicional. Dos niveles de
compresión especiales existen también: 0 (para
no-compresión), y -1 (el valor predeterminado de zlib --
actualmente 6).
window es el registro en base-2 del
tamaño de ventana del circuito cerrado de
compresión. Valores más altos (de hasta 15 -- 32768
bytes) producen mejor compresión al costo de más
memoria, mientras valores más bajos (alrededor de 9 -- 512
bytes) producen una compresión inferior en un espacio de
memoria más pequeño. El tamaño de
window es actualmente
15.
memory es una escala que indica
cuánta memoria deberÃa ser reservada. Los valores
válidos están en el rango de 1 (reserva
mÃnima) a 9 (reserva máxima). Esta reserva de memoria
afecta únicamente la repidez y no tiene impacto en el
tamaño del resultado generado.
Nota:
Dado que el nivel de compresión es el parámetro
usado con mayor frecuencia, puede indicarse alternativamente como
un valor entero simple (en lugar de un elemento tipo matriz).
Los filtros de compresión zlib.* están disponibles
con PHP desde la versión 5.1.0 si el
soporte de zlib se encuentra
habilitado. También están disponibles como una
caracterÃstica portada de vuelta en la versión
5.0.x, instalando el paquete zlib_filter desde
PECL. Estos filtros
no están disponibles para PHP 4.
Ejemplo N-7.
zlib.deflate y zlib.inflate
<?php $params = array('level' => 6, 'window' => 15, 'memory' => 9);
$texto_original = "This is a test.\nThis is only a test.\nThis is not an important string.\n"; echo "El texto original tiene " . strlen($texto_original) . " caracteres.\n";
$da = fopen('test.deflated', 'w'); stream_filter_append($da, 'zlib.deflate', STREAM_FILTER_WRITE, $params); fwrite($da, $texto_original); fclose($da);
echo "El archivo comprimido tiene " . filesize('test.deflated') . " bytes.\n"; echo "El texto original era:\n"; /* Use readfile y zlib.inflate para descomprimir al vuelo */ readfile('php://filter/zlib.inflate/resource=test.deflated');
/* Genera la salida:
El texto original tiene 70 caracteres. El archivo comprimido tiene 56 bytes. El texto original era: This is a test. This is only a test. This is not an important string.
*/ ?>
|
|
Ejemplo N-8.
zlib.deflate simple
<?php $texto_original = "This is a test.\nThis is only a test.\nThis is not an important string.\n"; echo "El texto original tiene " . strlen($texto_original) . " caracteres.\n";
$da = fopen('test.deflated', 'w'); /* Aqui "6" indica el nivel 6 de compresion */ stream_filter_append($da, 'zlib.deflate', STREAM_FILTER_WRITE, 6); fwrite($da, $texto_original); fclose($da);
echo "El archivo comprimido tiene " . filesize('test.deflated') . " bytes.\n";
/* Generates output:
El texto original tiene 70 caracteres. El archivo comprimido tiene 56 bytes.
*/ ?>
|
|
bzip2.compress y
bzip2.decompress funcionan de la misma forma que
los filtros zlib descritos anteriormente. El filtro
bzip2.compress acepta hasta dos
parámetros dados como elementos de una matriz asociativa:
blocks es un valor entero desde 1 hasta 9
que indica el número de bloques de 100kbytes de memoria a
reservar para el espacio de trabajo.
work es también un valor entero que
va desde 0 a 250, e indica cuánto esfuerzo debe invertirse
para expandir usando el método de compresión normal
antes de caer en un método más lento pero más
confiable. Modificar este parámetro afecta únicamente
la rapidez de compresién. Ni el tamaño de la salida
comprimida ni el uso de memoria se modifican por este valor. Un
factor de trabajo de 0 le indica a la biblioteca bzip que debe usar
el valor interno predeterminado.
El filtro bzip2.decompress sólo acepta un
parámetro, el cual puede ser pasado como un valor booleano
ordinario, o como el elemento small de una
matriz asociativa.
small, cuando se define a un valor TRUE,
le indica a la biblioteca bzip de realice una descompresión
con una cantidad de memoria mÃnima, al costo de la repidez.
Las filtros de compresión bzip2.* se encuentran disponibles
con PHP desde la versión 5.1.0 si el
soporte de bz2 se encuentra
habilitado. También se encuentran disponibles como una
caracterÃstica portada hacia atrás en la
versión 5.0.x, instalando el paquete
bz2_filter desde
PECL. Estos filtros
no se encuentran disponibles para PHP 4.
Ejemplo N-9.
bzip2.compress y
bzip2.decompress
<?php $param = array('blocks' => 9, 'work' => 0);
echo "El archivo original tiene " . filesize('LICENSE') . " bytes.\n";
$da = fopen('LICENSE.compressed', 'w'); stream_filter_append($da, 'bzip2.compress', STREAM_FILTER_WRITE, $param); fwrite($da, file_get_contents('LICENSE')); fclose($da);
echo "El archivo comprimido tiene " . filesize('LICENSE.compressed') . " bytes.\n";
/* Genera la salida:
El archivo original tiene 3288 bytes. El archivo comprimido tiene 1488 bytes.
*/ ?>
|
|