CXXIII. Funciones de Compresión Zlib

Introducción

Este módulo le permite leer y escribir de forma transparente sobre archivos gzip (.gz) comprimidos, a través de algunas versiones de la mayoría de funciones del sistema de archivos que trabajen con archivos comprimidos-gzip (y archivos sin comprimir también, pero no con sockets).

Nota: La versión 4.0.4 introdujo una envoltura fopen para archivos-.gz, de modo que puede usar una URL especial 'zlib:' para acceder a archivos comprimidos de forma transparente usando las funciones de acceso normales f*() si precede el nombre o ruta de archivo con un prefijo 'zlib:' al llamar a fopen().

En la versión 4.3.0, este prefijo especial ha cambiado a 'zlib://' para prevenir ambigüedades con nombres de archivo que contengan ':'.

Esta característica requiere una librería C de tiempo de ejecución que provee la función fopencookie(). Hasta donde se conoce, la librería de C GNU es la única que ofrece esta característica.

Requerimientos

Este módulo usa las funciones de zlib, por Jean-loup Gailly y Mark Adler. Debe usar una versión de zlib >= 1.0.9 con éste módulo.

Instalación

Zlib support in PHP is not enabled by default. You will need to configure PHP --with-zlib[=DIR]

La versión para Windows de PHP tiene soporte nativo para esta extensión. No se necesita cargar ninguna extensión adicional para usar estas funciones.

Nota: Builtin support for zlib on Windows is available with PHP 4.3.0.

Configuración en tiempo de ejecución

El comportamiento de estas funciones está afectado por los valores definidos en php.ini.

The zlib extension offers the option to transparently compress your pages on-the-fly, if the requesting browser supports this. Therefore there are three options in the configuration file php.ini.

Tabla 1. Zlib Configuration Options

NameDefaultChangeable
zlib.output_compression"Off"PHP_INI_ALL
zlib.output_compression_level"-1"PHP_INI_ALL
zlib.output_handler""PHP_INI_ALL
For further details and definition of the PHP_INI_* constants see ini_set().

A continuación se presenta una corta explicación de las directivas de configuración.

zlib.output_compression boolean/integer

Whether to transparently compress pages. If this option is set to "On" in php.ini or the Apache configuration, pages are compressed if the browser sends an "Accept-Encoding: gzip" or "deflate" header. "Content-Encoding: gzip" (respectively "deflate") and "Vary: Accept-Encoding" headers are added to the output.

You can use ini_set() to disable this in your script if the headers aren't already sent. If you output a "Content-Type: image/" header the compression is disabled, too (in order to circumvent a Netscape bug). You can reenable it, if you add "ini_set('zlib.output_compression', 'On')" after the header call which added the image content-type.

This option also accepts integer values instead of boolean "On"/"Off", using this you can set the output buffer size (default is 4KB).

Nota: output_handler must be empty if this is set 'On' ! Instead you must use zlib.output_handler.

zlib.output_compression_level integer

Compression level used for transparent output compression.

zlib.output_handler string

You cannot specify additional output handlers if zlib.output_compression is activated here. This setting does the same as output_handler but in a different order.

Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.

Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.

FORCE_GZIP (integer)

FORCE_DEFLATE (integer)

Ejemplos

Este ejemplo abre un archivo temporal y escribe una cadena de prueba en él, luego imprime el contenido de este archivo dos veces.

Ejemplo 1. Pequeño Ejemplo de Zlib

<?php

$nombre_archivo
= tempnam('/tmp', 'zlibtest') . '.gz';
echo
"<html>\n<head></head>\n<body>\n<pre>\n";
$s = "&iexcl;Tan solo una prueba, prueba, prueba, prueba, prueba, prueba!\n";

// abrir el archivo para escritura con maxima compresion
$zp = gzopen($nombre_archivo, "w9");

// escribir la cadena en el archivo
gzwrite($zp, $s);

// cerrar el archivo
gzclose($zp);

// abrir el archivo para lectura
$zp = gzopen($nombre_archivo, "r");

// leer 3 caracteres
echo gzread($zp, 3);

// mostrar la salida hasta el final de archivo y cerrarlo.
gzpassthru($zp);
gzclose($zp);

echo
"\n";

// abrir el archivo e imprimir su contenido (por segunda vez).
if (readgzfile($nombre_archivo) != strlen($s)) {
        echo
"&iexcl;Error con las funciones zlib!";
}
unlink($nombre_archivo);
echo
"</pre>\n</body>\n</html>\n";

?>
Tabla de contenidos
gzclose -- cierra un puntero a archivo-gz abierto
gzcompress -- Compress a string
gzdeflate -- Deflate a string
gzencode -- Create a gzip compressed string
gzeof -- prueba el fin-de-archivo de un puntero de archivo-gz
gzfile -- Lee un archivo gz completo en una matriz
gzgetc -- toma caracteres de un archivo-gz
gzgets -- toma una linea del archivo apuntado
gzgetss -- toma una linea del archivo-gz apuntado y le quita los tags HTML
gzinflate -- Inflate a deflated string
gzopen -- Abrir un archivo gz
gzpassthru --  Imprimir todos los datos que restan en un apuntador a archivo gz
gzputs -- Alias de gzwrite()
gzread -- Lee archivos-gz en modo Binario
gzrewind -- Reposiciona al puntero de archivo-gz, al inicio de aquel
gzseek -- Posiciona el puntero del archivo-gz
gztell -- Indica la posición de lectura/escritura del apuntador a archivo gz
gzuncompress -- Uncompress a deflated string
gzwrite -- Escritura en un archivo gz, segura con material binario
readgzfile -- Imprimir un archivo gz
zlib_get_coding_type -- Returns the coding type used for output compression