<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Filtros de Compressão</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Lista de Filtros Disponíveis" HREF="filters.html"><LINK REL="PREVIOUS" TITLE="Fitros de Conversão" HREF="filters.convert.html"><LINK REL="NEXT" TITLE="Encryption Filters" HREF="filters.encryption.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="section" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="filters.convert.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Apêndice O. Lista de Filtros Disponíveis</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="filters.encryption.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="filters.compression" >Filtros de Compressão</A ></H1 ><P > Enquanto os <A HREF="wrappers.compression.html" >a seção <I >Compression Streams</I > Apêndice N</A > permitem uma maneira de criar arquivos compatíveis com gzip and bz2 no seu sistema de arquivos local, eles não permitem meios para compressão generalizada sobre streams de rede, nem permitem uma maneira de começar com uma stream não-comprimida e mudar para uma comprimida. Para isso, um filtro comprimido pode ser aplicado a qualquer recuso de stream em qualquer momento. </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > Filtros de compressão <SPAN CLASS="emphasis" ><I CLASS="emphasis" >não</I ></SPAN > geram cabeçalhos e rodapés usados por utilitários de linha de comando como o <TT CLASS="literal" >gzip</TT >. Eles apenas comprimem e descomprimem as porções de conteúdo das streams de dados comprimidos. </P ></BLOCKQUOTE ></DIV ><P > <TT CLASS="literal" >zlib.deflate</TT > (compressão) e <TT CLASS="literal" >zlib.inflate</TT > (descompressão) são implementações dos métodos de compressão descritos no <A HREF="http://www.faqs.org/rfcs/rfc1951" TARGET="_top" >RFC 1951</A >. O filtro <TT CLASS="literal" >deflate</TT > recebe até três parâmetros passados como um array associativo. <CODE CLASS="parameter" >level</CODE > descreve o nível de compressão a ser usada (1-9). Números mais altos geralmente resultam em cargas menores com o custo de tempo de processamento adicional. Dois níveis especiais de compressão também existem: 0 (para nenhuma compressão), e -1 (padrão interno da zlib -- atualmente 6). <CODE CLASS="parameter" >window</CODE > é o logaritmo na base 2 do tamanho da janela de loopback de compressão. Valores mais altos (acima de 15 -- 32768 bytes) resultam em melhor compressão com o custo de memória, enquanto valores menores (abaixo de 9 -- 512 bytes) resultam em pior compressão usando menos memória. O tamanho padrão de <CODE CLASS="parameter" >window</CODE > atualmente é <TT CLASS="constant" ><B >15</B ></TT >. <CODE CLASS="parameter" >memory</CODE > é uma escala indicando quanta memória deve ser alocada para trabalhar. Valores válidos vão de 1 (alocação máxima) até 9 (alocação mínima). Essa alocação de memória afeta apenas a velocidade e não tem impacto sobre o tamanho da carga gerada. </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > O nível de compressão, por ser o parâmetro mais usado normalmente, pode ser passado de maneira alternativa com um simples valor inteiro (ao invés de um elemento de um array). </P ></BLOCKQUOTE ></DIV ><P > Filtros de compressão zlib estão disponíveis com o PHP a partir da versão <TT CLASS="literal" >5.1.0</TT > se o suporte à <A HREF="ref.zlib.html" >Referência CLXXXVIII, <I >Zlib - Funções de Compressão</I ></A > estiver ativado. Eles também estão disponíveis como uma backport na versão <TT CLASS="literal" >5.0.x</TT > instalando o pacote <A HREF="http://pecl.php.net/package/zlib_filter" TARGET="_top" >zlib_filter</A > da <A HREF="http://pecl.php.net" TARGET="_top" >PECL</A >. Esses filtros <SPAN CLASS="emphasis" ><I CLASS="emphasis" >não</I ></SPAN > estão disponíveis para o PHP 4. </P ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN289395" ></A ><P ><B >Exemplo O-7. <TT CLASS="literal" >zlib.deflate</TT > e <TT CLASS="literal" >zlib.inflate</TT > </B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$params </font><font color="#007700">= array(</font><font color="#DD0000">'level' </font><font color="#007700">=> </font><font color="#0000BB">6</font><font color="#007700">, </font><font color="#DD0000">'window' </font><font color="#007700">=> </font><font color="#0000BB">15</font><font color="#007700">, </font><font color="#DD0000">'memory' </font><font color="#007700">=> </font><font color="#0000BB">9</font><font color="#007700">);<br /><br /></font><font color="#0000BB">$original_text </font><font color="#007700">= </font><font color="#DD0000">"This is a test.\nThis is only a test.\nThis is not an important string.\n"</font><font color="#007700">;<br />echo </font><font color="#DD0000">"The original text is " </font><font color="#007700">. </font><font color="#0000BB">strlen</font><font color="#007700">(</font><font color="#0000BB">$original_text</font><font color="#007700">) . </font><font color="#DD0000">" characters long.\n"</font><font color="#007700">;<br /><br /></font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">'test.deflated'</font><font color="#007700">, </font><font color="#DD0000">'w'</font><font color="#007700">);<br /></font><font color="#0000BB">stream_filter_append</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#DD0000">'zlib.deflate'</font><font color="#007700">, </font><font color="#0000BB">STREAM_FILTER_WRITE</font><font color="#007700">, </font><font color="#0000BB">$params</font><font color="#007700">);<br /></font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">$original_text</font><font color="#007700">);<br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br /><br />echo </font><font color="#DD0000">"The compressed file is " </font><font color="#007700">. </font><font color="#0000BB">filesize</font><font color="#007700">(</font><font color="#DD0000">'test.deflated'</font><font color="#007700">) . </font><font color="#DD0000">" bytes long.\n"</font><font color="#007700">;<br />echo </font><font color="#DD0000">"The original text was:\n"</font><font color="#007700">;<br /></font><font color="#FF8000">/* Use readfile and zlib.inflate to decompress on the fly */<br /></font><font color="#0000BB">readfile</font><font color="#007700">(</font><font color="#DD0000">'php://filter/zlib.inflate/resource=test.deflated'</font><font color="#007700">);<br /><br /></font><font color="#FF8000">/* Generates output:<br /><br />The original text is 70 characters long.<br />The compressed file is 56 bytes long.<br />The original text was:<br />This is a test.<br />This is only a test.<br />This is not an important string.<br /><br /> */<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN289400" ></A ><P ><B >Exemplo O-8. <TT CLASS="literal" >zlib.deflate</TT > simples </B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$original_text </font><font color="#007700">= </font><font color="#DD0000">"This is a test.\nThis is only a test.\nThis is not an important string.\n"</font><font color="#007700">;<br />echo </font><font color="#DD0000">"The original text is " </font><font color="#007700">. </font><font color="#0000BB">strlen</font><font color="#007700">(</font><font color="#0000BB">$original_text</font><font color="#007700">) . </font><font color="#DD0000">" characters long.\n"</font><font color="#007700">;<br /><br /></font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">'test.deflated'</font><font color="#007700">, </font><font color="#DD0000">'w'</font><font color="#007700">);<br /></font><font color="#FF8000">/* Here "6" indicates compression level 6 */<br /></font><font color="#0000BB">stream_filter_append</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#DD0000">'zlib.deflate'</font><font color="#007700">, </font><font color="#0000BB">STREAM_FILTER_WRITE</font><font color="#007700">, </font><font color="#0000BB">6</font><font color="#007700">);<br /></font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">$original_text</font><font color="#007700">);<br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br /><br />echo </font><font color="#DD0000">"The compressed file is " </font><font color="#007700">. </font><font color="#0000BB">filesize</font><font color="#007700">(</font><font color="#DD0000">'test.deflated'</font><font color="#007700">) . </font><font color="#DD0000">" bytes long.\n"</font><font color="#007700">;<br /><br /></font><font color="#FF8000">/* Generates output:<br /><br />The original text is 70 characters long.<br />The compressed file is 56 bytes long.<br /><br /> */<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ><P > <TT CLASS="literal" >bzip2.compress</TT > e <TT CLASS="literal" >bzip2.decompress</TT > funcionam da mesma maneira como os filtros da zlib descritos acima. O filtro <TT CLASS="literal" >bzip2.compress</TT > aceitam até dois parâmetros passados como elementos de um array associativo: <CODE CLASS="parameter" >blocks</CODE > é um valor inteiro de 1 até 9 especificando o número de blocos de 100kbyte de memória para alocar para o espaço de trabalho. <CODE CLASS="parameter" >work</CODE > também é um valor inteiro variando entre 0 e 250 indicando quanto esforço a será gasto usando o método normal de compressão antes de desistir e usar um mais lento, mas mais confiável. Alterar esse parâmetro afeta apenas a velocidade de compressão. Nem o tamanho da saída comprimida nem o uso de memória são alterados por essa configuração. Um fator de trabalho de 0 diz à biblioteca bzip para usar o padrão interno. O filtro <TT CLASS="literal" >bzip2.decompress</TT > só aceita um parâmetro, que pode ser passado ou como um valor boolean comum ou como o elemento <CODE CLASS="parameter" >small</CODE > de um array associativo. <CODE CLASS="parameter" >small</CODE >, quando configurado para o valor <TT CLASS="constant" ><B >TRUE</B ></TT >, diz a biblioteca bzip para fazer a descompressão usando o mínimo de memória com o custo de velocidade. </P ><P > Filtros de compressão bzip2 estão disponíveis no PHP a partir da versão <TT CLASS="literal" >5.1.0</TT > se o suporte à <A HREF="ref.bzip2.html" >Referência IX, <I >Bzip2</I ></A > estiver ativado. Eles também estão disponíveis como um backport na versão <TT CLASS="literal" >5.0.x</TT > instalando o pacote <A HREF="http://pecl.php.net/package/bz2_filter" TARGET="_top" >bz2_filter</A > da <A HREF="http://pecl.php.net" TARGET="_top" >PECL</A >. Esses filtros <SPAN CLASS="emphasis" ><I CLASS="emphasis" >não</I ></SPAN > estão disponíveis para o PHP 4. </P ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN289421" ></A ><P ><B >Exemplo O-9. <TT CLASS="literal" >bzip2.compress</TT > e <TT CLASS="literal" >bzip2.decompress</TT > </B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$param </font><font color="#007700">= array(</font><font color="#DD0000">'blocks' </font><font color="#007700">=> </font><font color="#0000BB">9</font><font color="#007700">, </font><font color="#DD0000">'work' </font><font color="#007700">=> </font><font color="#0000BB">0</font><font color="#007700">);<br /><br />echo </font><font color="#DD0000">"The original file is " </font><font color="#007700">. </font><font color="#0000BB">filesize</font><font color="#007700">(</font><font color="#DD0000">'LICENSE'</font><font color="#007700">) . </font><font color="#DD0000">" bytes long.\n"</font><font color="#007700">;<br /><br /></font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">'LICENSE.compressed'</font><font color="#007700">, </font><font color="#DD0000">'w'</font><font color="#007700">);<br /></font><font color="#0000BB">stream_filter_append</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#DD0000">'bzip2.compress'</font><font color="#007700">, </font><font color="#0000BB">STREAM_FILTER_WRITE</font><font color="#007700">, </font><font color="#0000BB">$param</font><font color="#007700">);<br /></font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">file_get_contents</font><font color="#007700">(</font><font color="#DD0000">'LICENSE'</font><font color="#007700">));<br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br /><br />echo </font><font color="#DD0000">"The compressed file is " </font><font color="#007700">. </font><font color="#0000BB">filesize</font><font color="#007700">(</font><font color="#DD0000">'LICENSE.compressed'</font><font color="#007700">) . </font><font color="#DD0000">" bytes long.\n"</font><font color="#007700">;<br /><br /></font><font color="#FF8000">/* Generates output:<br /><br />The original text is 3288 characters long.<br />The compressed file is 1488 bytes long.<br /><br /> */<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="filters.convert.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="filters.encryption.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Fitros de Conversão</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="filters.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Encryption Filters</TD ></TR ></TABLE ></DIV ></BODY ></HTML >