欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP的gzencode和gzdeflate以及gzcompress

程序员文章站 2022-05-25 21:25:56
...

参考资料 http://zhiwei.li/text/2013/04/%E7%94%A8zlib%E8%A7%A3%E5%8E%8B%E7%BC%A9gzip/ http://www.php.net/manual/en/function.gzencode.php http://*.com/questions/621976/which-compression-method-to-use-in-php gzencode 建立一个gzip

参考资料

http://zhiwei.li/text/2013/04/%E7%94%A8zlib%E8%A7%A3%E5%8E%8B%E7%BC%A9gzip/

http://www.php.net/manual/en/function.gzencode.php

http://*.com/questions/621976/which-compression-method-to-use-in-php

gzencode  建立一个gzip压缩的字符串
$encodingmode = FORCEGZIP   默认为强制gzip
产生的压缩数据 同 Linux下的gzip命令 兼容

$level = -1
0为不压缩
9最强压缩率
不指定,就使用zlib库的默认压缩率

在PHP 5.4.0 之前, 使用 FORCE_DEFLATE , 输出是, 在一个gzip文件头之后, 没有crc32校验, 然后是 标准的zlib压缩数据(包括zlib头)

在PHP 5.4.0及其之后, FORCE_DEFLATE输出一个 RFC1950兼容的数据(包含zlib头, 压缩数据, 以及一个adler校验)

gzip格式,用于文件压缩,能保存原始文件名和最后一次修改日期等信息

gzdeflate

使用DEFLATE数据格式 压缩,   使用DEFLATE算法, 是其他格式的基础

$encoding = ZLIBENCODINGRAW

这个函数生成纯粹的压缩数据,没有任何 头部信息和CRC信息

gzcompress

使用ZLIB 格式, 它含有简单的头部信息.

设计来在内存中使用,或者进程间通信,  有一个精简的头部和尾部信息, 并使用比gzip更快的完整性校验算法

头部是2个字节,尾部是4个字节

————–对于http协议中的gzip, 就是使用gzcompress和gzuncompress来压缩和解压缩

网上一个谬误,就是这3套函数,使用不同的算法,gzcompress使用的是什么GZIP 算法,

其实这套函数,都是使用同一套压缩算法,DEFLATE算法.

区别是gzdeflate纯压缩,没有任何头部信息

gzcompress有简单的头部信息和尾部校验

gzip有比较完整的头部信息和校验,适合于文件压缩

那种比较这3套函数的压缩率的人,纯粹是无知得滑稽可笑….

另外 pkzip格式也是使用这套算法,只不过文件头部格式的定义,跟gzip不一样

另外,在Java中也存在这种区别, GZIPOutputStream 产生的是 gzip命令兼容的格式, 要用gzdecode()才能正确解压缩

DeflaterOutputStream 产生的 ZLIB格式,  用gzuncompress解压缩