In the hopes this will help others - a hard to spot gotcha when implementing zlib.output_compression. if you use flush() anywhere in your script (even right at the end) the compression won't work - you need to let that happen automatically or it ends up being sent uncompressed.
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.
| Nome | Padrão | Modificável | Modificação |
|---|---|---|---|
| zlib.output_compression | 0 | PHP_INI_ALL | Disponível desde o PHP 4.0.5. |
| zlib.output_compression_level | "-1" | PHP_INI_ALL | Disponível desde o PHP 4.3.0. |
| zlib.output_handler | "" | PHP_INI_ALL | Disponível desde o PHP 4.3.0. |
Aqui está uma breve explicação das diretrizes de configuração.
-
zlib.output_compressionbooleano/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. Em tempo de execução, isso só pode ser definido antes de enviar qualquer saída.
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_levelinteiro -
Nível de compressão usado para as saídas.
-
zlib.output_handlerstring -
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.
Apparently, there is a bug in certain versions of PHP with setting zlib.output_compression to "On" via ini_set:
<?php
ini_set("zlib.output_compression", "On");
?>
In some cases, it does not send the Content-type header and browsers won't know to decompress the contents before displaying. Instead, you can set it to the buffer size, which sends the correct header:
<?php
ini_set("zlib.output_compression", 4096);
?>
