PHP Socket编程 之 PHP的自带的三个压缩相关的函数:gzcompress、gzencode、gzdeflate

PHP的自带的函数中,有三个压缩相关的函数:gzcompress、gzencode、gzdeflate,下面我们通过一段程序,来比较一下这三个函数的压缩比。
代码:
$string = "8aeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeer8aaaaaaaaaaaaaaaaaaaaaaadasd456as
d456asd456asd456asd456asd456asd456asd456asd456asd456asd456asd456fasdf45645645645645645
6456456456456456456456456456456456456456456456456456456456456456456456456a56fs4s4s4s4s
4s4s4s4s4s4s4s4s4s4dsdga133333333333333333333w8etw7q9999999999999999999a23s1dfffffffff

fffffffffffffffa456ssssssssssssdv2sdddddddddddddddddddf";

echo "字符串长度:";

echo strlen($xx);

echo "<br/>gzcompress压缩后长度:" . strlen(gzcompress($string,9));

echo "<br/>gzencode压缩后长度:" . strlen(gzencode($string,9));

echo "<br/>gzdeflate压缩后长度:" . strlen(gzdeflate($string,9));


运行结果是:
字符串长度:393     gzcompress压缩后长度:96         gzencode压缩后长度:108         gzdeflate压缩后长度:90

由此可见,这三个函数按照压缩效果进行排序:gzdeflate、gzcompress、gzencode,      gzdeflate压缩效果最好,gzcompress次之,gzencode最差。

分析:
查了下手册,gzcompress、gzencode、gzdeflate这三个函数,分别采用的是zlib、gzip、DEFLATE方式压缩格式。通过上面的运行结果,不知道是否可以这么认为,DEFLATE、zlib、gzip的压缩效果递减。


 

压缩解压实例

/**
 * 判断字符串是否base64编码
 */
function func_is_base64($str)
{  
    return $str == base64_encode(base64_decode($str)) ? true : false;  
} 
/**
 * 压缩内容
 */
function func_gzcompress($str, $level = 9)
{
    if (!func_is_base64($str)) {
        return base64_encode(gzcompress($str, $level));
    }
    return $str;
}
/**
 * 解压内容
 */
function func_gzuncompress($str)
{
    if (func_is_base64($str)) {
        return gzuncompress(base64_decode($str));
    }
    return $str;
}

经网友测试得出结果:

    gzcompress 速度最快,压缩比率较高。 

    gzdeflate     压缩比率最高,速度稍慢于gzcompress 

    gzencode 与 gzdeflate 比较接近,gzdeflate稍有优势 

    bzcompress 速度最慢,压缩比率最慢。 

    因此建议使用 gzcompress 和 gzdeflate。
———————链接:https://blog.csdn.net/weng_xianhu/article/details/79419551

比较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

PHP的压缩实现依赖于zlib,zlib是一个提供了 deflate, zlib, gzip 压缩方法的函数库。

———————————————————

gzip压缩格式                 gzencode(str, num压缩级别)           解压gzdecode()

deflate数据压缩算法     gzdeflate(str, num压缩级别)            解压gzinflate()

zlib压缩格式                  gzcompress(str, num压缩级别)       解压gzuncompress()

 

posted @ 2020-07-13 15:50  笠航  阅读(501)  评论(0编辑  收藏  举报