CXLI. Zlib - Funções de Compressão

Introdução

Este módulo lhe possibilita ler e gerar transparentemente arquivos comprimidos do tipo gzip (.gz), através de muitas das funções filesystem nas quais funcionam com arquivos gzip comprimidos (e arquivos não comprimidos também, mas não com sockets).

Nota: A Versão 4.0.4 introduziu a função fopen-wrapper para arquivos .gz, então você pode usar o prefixo 'zlib:' especial para acessar arquivos comprimidos transparentemente usando as funções normais de acesso a arquivos f*() se você concatenar o nome do arquivo e ou seu caminho com o prefixo 'zlib:' quando usar a função fopen().

Na versão 4.3.0, este prefixo especial foi mudado para 'zlib://' para previnir ambiguidades com nome de arquivos contendo ':'.

Esta facilidade requer uma biblioteca em tempo de execução que provê a função fopencookie(). Em meu conhecimento atual a GNU libc é a única bliblioteca que provê esta facilidade.

Dependências

Este módulo usa as funções da zlib por Jean-loup Gailly e Mark Adler. Você terá que usar uma versão zlib >= à 1.0.9 com este módulo.

Configurações em execução

O comportamento dessas funções podem ser modificado pelas configurações do php.ini.

A extensão zlib oferece a opção de comprimir transparentemente suas páginas em tempo real, se o navegador requisitante suportar isto. Então existem três opções no arquivo de configuração php.ini.

Tabela 1. Opções de Configuração da Zlib

NomePadrãoModificável
zlib.output_compression"Off"PHP_INI_ALL
zlib.output_compression_level"-1"PHP_INI_ALL
zlib.output_handler""PHP_INI_ALL
Para maiores detalhes e definições das constantes PHP_INI_* veja a função ini_set().

Aqui está uma breve explicação das diretrizes de configuração.

zlib.output_compression booleano/inteiro

Serve para comprimir páginas de modo transparente. Se esta opção for mudada para "On" no php.ini ou na configuração do Apache, as páginas serão comprimidas se o navegador enviar um cabeçalho "Accept-Encoding: gzip" ou "deflate". "Content-Encoding: gzip" (respectivamente "deflate") e cabeçalhos "Vary: Accept-Encoding" serão adicionados para a saida.

Você pode usar a função ini_set() para desabilitar isto em seu script se os cabeçalhos ainda não foram enviados. Se você enviar um cabeçalho à saída "Content-Type: image/" a compressão será desabilitada, também (para corrigir um defeito do Netscape). Você pode reabilitar isto, se você adicionar a função "ini_set('zlib.output_compression', 'On')" depois da chamada do cabeçalho que que foi adicionado o content-type da imagem.

Esta opção também aceita valores inteiros em vez de valores booleanos "On"/"Off", usando isto você pode configurar o tamanho do buffer de saída (o padrão é 4KB).

Nota: output_handler deve estar vazio se a diretriz estiver configurada em 'On'! Em vez disto você deve usar zlib.output_handler.

zlib.output_compression_level inteiro

Nível de compressão usado para as saídas.

zlib.output_handler string

Você não pode especificar tratamentos adicionais de saída se zlib.output_compression for ativado. Esta configuração faz o mesmo que a output_handler mas em uma ordem diferente.

Tipos Resource

Esta extensão não possui nenhum tipo resource.

Constantes pré-definidas

As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução.

FORCE_GZIP (integer)

FORCE_DEFLATE (integer)

Exemplos

Este exemplo abre um arquivo temporário e gera uma string teste dentro dele, então ela mostra o conteúdo deste arquivo duas vezes.

Exemplo 1. Pequeno Exemplo das funções Zlib

<?php

$filename
= tempnam ('/tmp', 'zlibteste').'.gz';
print
"<html>\n<head></head>\n<body>\n<pre>\n";
$s = "Somente um teste, teste, teste, teste, teste, teste, teste, teste!\n";

// abre o arquivo para gerar ele com a compressão máxima
$zp = gzopen($filename, "w9");

// escreve a string no arquivo
gzwrite($zp, $s);

// fecha o arquivo
gzclose($zp);

// abre o arquivo para leitura
$zp = gzopen($filename, "r");

// lê 3 caracteres
print gzread($zp, 3);

// mostra o conteúdo até o fim do arquivo e o fecha.
gzpassthru($zp);

print
"\n";

// abre o arquivo e imprime o conteúdo dele (pela segunda vez).
if (readgzfile($filename) != strlen($s)) {
        echo
"Erro com as funções zlib!";
}
unlink($filename);
print
"</pre>\n</h1></body>\n</html>\n";

?>
Índice
gzclose -- Fecha um ponteiro para um arquivo-gz
gzcompress -- Comprime uma string
gzdeflate -- Comprime uma string usando DEFLATE
gzencode -- Cria uma string comprimida com gzip
gzeof -- Testa para o fim de um ponteiro de arquivo-gz
gzfile -- Lê todo o arquivo-gz para uma matriz
gzgetc -- Obtém um caractere de um ponteiro de arquivo-gz
gzgets -- Obtém uma linha de um ponteiro de arquivo
gzgetss --  Obtém uma linha de um ponteiro de arquivo-gz e retira as tags HTML
gzinflate -- Descomprime uma string usando DEFLATE
gzopen -- Abre um arquivo-gz
gzpassthru --  Envia todos os dados restantes em um ponteiro para arquivo-gz
gzputs -- Apelido para gzwrite()
gzread -- Leitura de arquivos-gz segura para binários
gzrewind -- Retorna ao início a posição de um ponteiro para um arquivo-gz
gzseek -- Move o ponteiro de um arquivo-gz
gztell -- Indica a posição de leitura/gravação em um ponteiro para arquivo-gz
gzuncompress -- Descomprime uma string com DEFLATED
gzwrite -- Escrita segura para binário em arquivo-gz
readgzfile -- Mostra um arquivo-gz
zlib_get_coding_type -- Retorna o tipo de codificação para a compressão de saída