在日常的开发和电脑使用中,我们经常会接触到一些压缩和解压的工具。PHP也为我们准备了很多相关的操作扩展包,有直接可用的函数可以方便的操作一些压缩解压函数。今天,我们来学习一种比较简单但不太常用的压缩格式:Bzip2。安装扩展安装此扩展需要在系统上安装bzip2-devel。所以我们需要先在系统上安装这个软件包的支持,然后这个扩展和PHP安装包一起发布,所以我们只需要编译PHP,在./configure中添加相应的编译命令即可。#yuminstallbzip2-devel#./configurexxxx--with-bz2#make&&makeinstall基本操作Bzip2提供的功能不多,非常简单。我们首先要看的是将字符串保存到文件中。$bz=bzopen('/tmp/test.bz','w');//-rw-r--r--1rootroot14Jun2809:51test.bz$text="ThisisBzCompress";bzwrite($bz,$text);//-rw-r--r--1rootroot59Jun2809:53test.bzbzclose($bz);$bz=bzopen('/tmp/test.bz','r');$v=bzread($bz);echo$v,PHP_EOL;//这是BzCompressbzclose($bz);就像文件操作函数一样,我们需要先通过bzopen()打开文件,得到一个句柄。然后使用bzwrite()写入文件并使用bzread()读取文件。最后使用bzclose()关闭文件。这里需要注意的是bzopen()的第二个参数,也就是打开文件的形式,只能写“w”或者“r”。它没有其他类型,不能同时读和写,即不能写成“wr”形式。所以我们必须在写入文件后再次使用“r”打开文件才能读取它。读取长度设置$bz=bzopen('/tmp/test.bz','r');$v=bzread($bz,10);echo$v,PHP_EOL;//这是Bz$v=bzread($bz);echo$v,PHP_EOL;//Compressbzclose($bz);bzread()的第二个参数是一个可选的字节长度,默认为1024,一次最多可以读取8192个未压缩的字节。字符串编码Bzip2扩展还为我们提供了直接对字符串进行编码的函数。不必每次都保存到文件中。如果是同一个字符串,使用字符串编码的函数和输出到文件的内容是相同的乱码二进制内容。$str="测试压缩字符串";$bzstr=bzcompress($str,9);echo$bzstr,PHP_EOL;//BZh91AY&SY??J????@////??1//df????2?h>.?p?!?//$newStr=bzdecompress($bzstr);echo$newStr,PHP_EOL;$chineseStr="test";$bzstr=bzcompress($chineseStr,9);echobzdecompress($bzstr),PHP_EOL;bzcompress()用于对字符串进行编码压缩,第二个参数为压缩比,9为最高级别。编码内容是非人类的二进制乱码。bzdecompress()用于解码编码内容。相信很多朋友都发现了,这可以用于一些机密内容的加密传输。同时在测试代码中我们可以看到它也正常支持中文。错误信息最后,让我们看看Bzip2的错误处理函数。$bz=bzopen('/tmp/test.bz','r');bzwrite($bz,'aaa');print_r(bzerror($bz));//数组//(//[errno]=>-1//[errstr]=>SEQUENCE_ERROR//)echobzerrno($bz),PHP_EOL;//-1echobzerrstr($bz),PHP_EOL;//序列错误bzclose($bz);我们首先构建了一个错误环境。用“r”打开文件获得句柄后,写入文件。bzerror()会返回错误信息数组,其中包含错误号和错误信息内容。但是bzerrno()和bzerrstr()分别返回错误号和错误内容。三个非常简单易懂的函数。综上所述,这个扩展非常简单。最重要的是,Bzip2的压缩文件类型并不是很常用的类型,所以可能知道的人不多。不过我们还是发现了一点惊喜,那就是它提供了字符串编码和解码函数,而这两个函数在某些场景下确实可以作为信息加密的手段。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/PHP%E7%9A%84Bzip2%E5%8E%8B%E7%BC%A9%E6%89%A9%E5%B1%95%E5%B7%A5%E5%85%B7.php参考文档:https://www.php.net/manual/zh/book.bzip2.php所有媒体平台均可搜索【硬核项目经理】
