Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 103

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>压缩过滤器</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="PHP 手册"
HREF="index.html"><LINK
REL="UP"
TITLE="可用过滤器列表"
HREF="filters.html"><LINK
REL="PREVIOUS"
TITLE="转换过滤器"
HREF="filters.convert.html"><LINK
REL="NEXT"
TITLE="加密过滤器"
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"
>PHP 手册</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="filters.convert.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>附录 O. 可用过滤器列表</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="filters.encryption.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="section"
><H1
CLASS="section"
><A
NAME="filters.compression"
>压缩过滤器</A
></H1
><P
>&#13;   虽然<A
HREF="wrappers.compression.html"
>压缩封装协议</A
>提供了在本地文件系统中
   创建 gzip 和 bz2
   兼容文件的方法,但不代表可以在网络的流中提供通用压缩的意思,也不代表可以将一个非压缩的流转换成一个压缩流。对此,压缩过滤器可以在任何时候应用于任何流资源。
  </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    压缩过滤器<SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>不</I
></SPAN
>产生命令行工具如
    <TT
CLASS="literal"
>gzip</TT
> 的头和尾信息。只是压缩和解压数据流中的有效载荷部分。
   </P
></BLOCKQUOTE
></DIV
><P
>&#13;   <TT
CLASS="literal"
>zlib.deflate</TT
>(压缩)和
   <TT
CLASS="literal"
>zlib.inflate</TT
>(解压)实现了定义与
   <A
HREF="http://www.faqs.org/rfcs/rfc1951"
TARGET="_top"
>RFC 1951</A
>
   的压缩算法。<TT
CLASS="literal"
>deflate</TT
>
   过滤器可以接受以一个关联数组传递的最多三个参数。<CODE
CLASS="parameter"
>level</CODE
>
   定义了压缩强度(1-9)。数字更高通常会产生更小的载荷,但要消耗更多的处理时间。存在两个特殊压缩等级:0(完全不压缩)和
   -1(zlib 内部默认值,目前是 6)。<CODE
CLASS="parameter"
>window</CODE
>
   是压缩回溯窗口大小,以二的次方表示。更高的值(大到 15 ―― 32768
   字节)产生更好的压缩效果但消耗更多内存,低的值(低到 9 ―― 512
   字节)产生产生较差的压缩效果但内存消耗低。目前默认的
   <CODE
CLASS="parameter"
>window</CODE
> 大小是 <TT
CLASS="constant"
><B
>15</B
></TT
>。<CODE
CLASS="parameter"
>memory</CODE
>
   用来指示要分配多少工作内存。合法的数值范围是从 1(最小分配)到
   9(最大分配)。内存分配仅影响速度,不会影响生成的载荷的大小。
  </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    因为最常用的参数是压缩等级,也可以提供一个整数值作为此参数(而不用数组)。
   </P
></BLOCKQUOTE
></DIV
><P
>&#13;    zlib.* 压缩过滤器自 PHP 版本 <TT
CLASS="literal"
>5.1.0</TT
> 起可用,在激活
    <A
HREF="ref.zlib.html"
>zlib</A
> 的前提下。也可以通过安装来自
    <A
HREF="http://pecl.php.net"
TARGET="_top"
>PECL</A
> 的 <A
HREF="http://pecl.php.net/package/zlib_filter"
TARGET="_top"
>zlib_filter</A
> 包作为一个后门在
    <TT
CLASS="literal"
>5.0.x</TT
> 版中使用。此过滤器在 PHP 4 中<SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>不可用</I
></SPAN
>。
  </P
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN303617"
></A
><P
><B
>例 O-7. 
    <TT
CLASS="literal"
>zlib.deflate</TT
> 和
    <TT
CLASS="literal"
>zlib.inflate</TT
>
   </B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$params </font><font color="#007700">= array(</font><font color="#DD0000">'level' </font><font color="#007700">=&gt; </font><font color="#0000BB">6</font><font color="#007700">, </font><font color="#DD0000">'window' </font><font color="#007700">=&gt; </font><font color="#0000BB">15</font><font color="#007700">, </font><font color="#DD0000">'memory' </font><font color="#007700">=&gt; </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">?&gt;</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="AEN303622"
></A
><P
><B
>例 O-8. 
    <TT
CLASS="literal"
>zlib.deflate</TT
> 简单参数用法
   </B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?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">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
><P
>&#13;   <TT
CLASS="literal"
>bzip2.compress</TT
> 和
   <TT
CLASS="literal"
>bzip2.decompress</TT
> 工作的方式与上面讲的 zlib
   过滤器相同。<TT
CLASS="literal"
>bzip2.compress</TT
>
   过滤器接受以一个关联数组给出的最多两个参数:<CODE
CLASS="parameter"
>blocks</CODE
>
   是从 1 到 9 的整数值,指定分配多少个 100K
   字节的内存块作为工作区。<CODE
CLASS="parameter"
>work</CODE
> 是 0 到 250
   的整数值,指定在退回到一个慢一些,但更可靠的算法之前做多少次常规压缩算法的尝试。调整此参数仅影响到速度,压缩输出和内存使用都不受此设置的影响。将此参数设为
   0 指示 bzip 库使用内部默认算法。<TT
CLASS="literal"
>bzip2.decompress</TT
>
   过滤器仅接受一个参数,可以用普通的布尔值传递,或者用一个关联数组中的
   <CODE
CLASS="parameter"
>small</CODE
> 单元传递。当 <CODE
CLASS="parameter"
>small</CODE
>
   设为 <TT
CLASS="constant"
><B
>TRUE</B
></TT
> 值时,指示 bzip 库用最小的内存占用来执行解压缩,代价是速度会慢一些。
  </P
><P
>&#13;    bzip2.* 压缩过滤器自 PHP 版本 <TT
CLASS="literal"
>5.1.0</TT
> 起可用,在激活
    <A
HREF="ref.bzip2.html"
>bz2</A
> 支持的前提下。也可以通过安装来自
    <A
HREF="http://pecl.php.net"
TARGET="_top"
>PECL</A
> 的<A
HREF="http://pecl.php.net/package/bz2_filter"
TARGET="_top"
>bz2_filter</A
> 包作为一个后门在
    <TT
CLASS="literal"
>5.0.x</TT
> 版中使用。此过滤器在 PHP 4 中<SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>不可用</I
></SPAN
>。
  </P
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN303643"
></A
><P
><B
>例 O-9. 
    <TT
CLASS="literal"
>bzip2.compress</TT
> 和
    <TT
CLASS="literal"
>bzip2.decompress</TT
>
   </B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$param </font><font color="#007700">= array(</font><font color="#DD0000">'blocks' </font><font color="#007700">=&gt; </font><font color="#0000BB">9</font><font color="#007700">, </font><font color="#DD0000">'work' </font><font color="#007700">=&gt; </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">?&gt;</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"
>上一页</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>起始页</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="filters.encryption.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>转换过滤器</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="filters.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>加密过滤器</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>