想象一个场景,有一个很长的字符串需要存储到文件或者数据库中,而且有好多这种字符串,这个时候直接拿着这个字符串去操作可能会存在一定的效率问题,有没有一种方式可以缩短每个很长的字符串去存储,然后我们在获取使用的时候还会保持和之前字符串一样,这样就可以一举两得了,要想实现这个需求就需要用到PHP中的压缩技术了。
gzcompress gzdeflate gzencode
,他们分别使用了不同的压缩算法来达到我们想要的效果,那么与之对应,就存在可以把压缩过的字符串恢复成原来字符串的长度和内容的操作,那就是解压缩,PHP也提供了和压缩对应的压缩函数:gzcompress gzdeflate gzencode
,下面我们分别来说明他们的使用方法和技巧。false
,适用版本:(PHP 4 >= 4.0.1, PHP 5, PHP 7)gzcompress ( string $data [, int $level = -1 [, int $encoding = ZLIB_ENCODING_DEFLATE ]] ) : string
参数 | 说明 |
---|---|
data | 要压缩的字符串 |
level | 压缩级别。可以指定为0(表示无压缩),指定为9(表示最大压缩)。 如果使用-1,则使用zlib库的默认压缩为6。 |
encoding | 压缩采用的编码算法,一个ZLIB_ENCODING_*的常数(ZLIB_ENCODING_RAW 、ZLIB_ENCODING_DEFLATE、ZLIB_ENCODING_GZIP),可以看出来它可以使用不同的压缩算法进行压缩 |
$len_str = <<<STR 11111111111111111111111111111111111111111 11111111111111111111111111111111111111111 1111111111111111111111111111111 STR; echo "压缩前:"; var_dump($len_str); $result = gzcompress($len_str); echo "<br/> 压缩后:"; var_dump($result); echo "<br/> 解压后:"; var_dump(gzuncompress($result));
false
,版本说明:(PHP 4 >= 4.0.4, PHP 5, PHP 7)gzdeflate ( string $data [, int $level = -1 [, int $encoding = ZLIB_ENCODING_RAW ]] ) : string
参数 | 说明 |
---|---|
data | 要压缩的字符串 |
level | 压缩级别。可以指定为0(表示无压缩),指定为9(表示最大压缩)。如果未给出,则默认压缩级别将是zlib库的默认压缩级别。 |
encoding | 压缩采用的编码算法,一个ZLIB_ENCODING_*的常数(ZLIB_ENCODING_RAW 、ZLIB_ENCODING_DEFLATE、ZLIB_ENCODING_GZIP),可以看出来它可以使用不同的压缩算法进行压缩 |
$len_str = <<<STR 11111111111111111111111111111111111111111 11111111111111111111111111111111111111111 1111111111111111111111111111111 STR; echo "压缩前:"; var_dump($len_str); $result = gzdeflate($len_str,9); echo "<br/> 压缩后:"; var_dump($result); echo "<br/> 解压后:"; var_dump(gzinflate ($result));
gzencode ( string $data [, int $level = -1 [, int $encoding_mode = FORCE_GZIP ]] ) : string
参数 | 说明 |
---|---|
data | 要压缩的字符串数据 |
level | 压缩级别。可以指定为0(表示无压缩),指定为9(表示最大压缩)。如果未给出,则默认压缩级别将是zlib库的默认压缩级别。 |
encoding | 编码模式。可以是FORCE_GZIP(默认值)或FORCE_DEFLATE。 在PHP 5.4.0之前的版本中,FORCE_DEFLATE在gzip文件标头之后使用标准zlib压缩字符串(包括zlib标头),但没有尾随crc32校验和。 在PHP 5.4.0及更高版本中,FORCE_DEFLATE生成符合RFC 1950的输出,包括zlib标头,压缩的数据和Adler校验和。 |
$len_str = <<<STR 11111111111111111111111111111111111111111 11111111111111111111111111111111111111111 1111111111111111111111111111111 STR; echo "压缩前:"; var_dump($len_str); $result = gzencode($len_str,9); echo "<br/> 压缩后:"; var_dump($result); echo "<br/> 解压后:"; var_dump(gzdecode ($result));