主页 > PHP教程 > 正文

PHP的紧缩函数完结:gzencode、gzdeflate和gzcompress比较

gzencode 默许运用ZLIB_ENCODING_GZIP编码,运用gzip紧缩格局,实际上是运用defalte 算法紧缩数据,然后加上文件头和adler32校验

gzdeflate 默许运用ZLIB_ENCODING_RAW编码办法,运用deflate数据紧缩算法,实际上是先用 LZ77 紧缩,然后用霍夫曼编码紧缩

gzcompress ;默许运用ZLIB_ENCODING_DEFLATE编码,运用zlib紧缩格局,实际上是用 deflate 紧缩数据,然后加上 zlib 头和 CRC 校验

这三个函数的比较实质上是三种紧缩办法:deflate, zlib, gzip的比较。

从功用的维度看:deflate 好于 gzip 好于 zlib

从文本文件默许紧缩率紧缩后体积的维度看:deflate 好于 zlib 好于 gzip

这三种算法中gzip 、zlib的作者都是Jean-Loup Gailly和 Mark Adler。

这两种算法以及图形格局png,运用的紧缩算法却都是deflate算法。

deflate算法是一起运用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据紧缩算法。

它开始是由Phil Katz为他的PKZIP归档东西第二版所界说的,后来界说在 RFC 1951标准中。

deflate算法的紧缩与解压的完结进程能够在紧缩库zlib上找到。

PHP的紧缩完结依赖于zlib,zlib是一个供给了 deflate, zlib, gzip 紧缩办法的函数库。

咱们所运用的上面三个函数,将参数中的encoding转为相同,紧缩率设置相同,则其终究调用的是同一个函数,作用和功用相同。

PHP的zlib完结是以扩展的办法存在于ext/zlib目录中。经过deflateInit2() + deflate() + deflateEnd()三个函数合作完结紧缩功用,inflateInit2() + inflate() + inflateEnd()三个函数合作完结解压功用。紧缩终究都是经过php_zlib_encode函数完结调用,除了输入的字符串,紧缩率,成果的输出外,不同的进口函数调用参数不同的是其encoding。deflateInit2的第四个参数指定encoding,PHP界说了三个常量:

#define PHP_ZLIB_ENCODING_RAW          -0xf      //deflate -15#define PHP_ZLIB_ENCODING_GZIP          0x1f      //gzip 15 + 16#define PHP_ZLIB_ENCODING_DEFLATE     0x0f      // zlib 15

三个函数在调用进程能够直接指定encoding运用其它的算法:

zlib:   ZLIB_ENCODING_DEFLATE gzip: ZLIB_ENCODING_GZIPdeflate: ZLIB_ENCODING_RAW

此三个函数是三种算法的简略调用办法,以更好的命名展示。三个函数间能够经过指定相同的encoding到达相同的作用,而且PHP也供给zlib_encode函数作为通用的紧缩函数。


上一篇:晋级nginx,检查现已装置的模块,并躲藏或许修正版本号
下一篇:PHP文件读写锁的问题详解

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854