Manual do PHP
Anterior |  | Próxima

# CXXIII. 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.

# Requisitos

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ção durante 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

Nome | Padrão | Modificá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 Predefinidas

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";
?>`

Anterior | Principal | Próxima
zip_read | Acima | gzclose