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
$test_string = 'ab cde fgh ijk lmn opqrstuvwxyz 0111123456 7899 99'; var_dump($test_string); //原字符串长度 var_dump(gzcompress($test_string,9)); //gzcompress压缩后 var_dump(gzdeflate($test_string,9)); //gzdeflate压缩后 var_dump(gzencode($test_string,9)); //gzencode压缩后 var_dump(gzuncompress(gzcompress($test_string))); //gzcompress压缩后再解压缩回来 var_dump(gzinflate(gzdeflate($test_string))); //gzdeflate压缩后再解压缩回来 var_dump(gzdecode(gzencode($test_string))); //gzencode压缩后再解压缩回来
php5.4以后提供了 zlib_encode() 函数,第二个参数指定压缩的方式
ZLIB_ENCODING_RAW
ZLIB_ENCODING_DEFLATE
ZLIB_ENCODING_GZIP
$str = 'hello world'; $enc = zlib_encode($str, ZLIB_ENCODING_DEFLATE);
对应的解码函数
zlib_decode ( string $data , int $max_length = 0 ) : string|false