在日常的开发和电脑应用中,咱们常常会接触到压缩和解压的一些工具,PHP 也为咱们筹备了很多相干的操作扩大包,都有间接可用的函数可能不便的操作一些压缩解压性能。明天,咱们先学习一个比较简单但不太罕用的压缩格局:Bzip2。
装置扩大
这个扩大的装置须要零碎有 bzip2-devel 。所以咱们须要先给零碎装上这个软件包的反对,而后这个扩大是随 PHP 安装包一起公布的,所以只须要编译一下 PHP ,并在 ./configure 中增加对应的编译命令即可。
<code class="shell"># yum install bzip2-devel # ./configure xxxx --with-bz2 # make && make install
基本操作
Bzip2 提供的函数不多,而且非常简单,咱们首先来看的是将字符串保留到一个文件中。
<code class="php">$bz = bzopen('/tmp/test.bz', 'w'); // -rw-r--r-- 1 root root 14 Jun 28 09:51 test.bz $text = "This is Bz Compress"; bzwrite($bz, $text); // -rw-r--r-- 1 root root 59 Jun 28 09:53 test.bz bzclose($bz); $bz = bzopen('/tmp/test.bz', 'r'); $v = bzread($bz); echo $v, PHP_EOL; // This is Bz Compress bzclose($bz);
就和文件操作函数一样,咱们须要先通过 bzopen() 关上文件取得句柄。而后应用 bzwrite() 来写入文件,并应用 bzread() 来读取文件。最初应用 bzclose() 来敞开文件。
这里须要留神的是 bzopen() 的第二个参数,也就是文件关上的模式,只能写 “w” 或者 “r” 。它没有其它类型,并且不能同时读写,也就是不能写成 “wr” 这种模式。所以咱们在写完文件后又要再应用 “r” 关上文件能力进行读取。
读取长度设置
<code class="php">$bz = bzopen('/tmp/test.bz', 'r'); $v = bzread($bz, 10); echo $v, PHP_EOL; // This is Bz $v = bzread($bz); echo $v, PHP_EOL; // Compress bzclose($bz);
bzread() 的第二个参数是可选的字节长度,默认是 1024 ,一次最大可读入 8192 个未压缩字节。
字符串编码
Bzip2 扩大还为咱们提供了间接对字符串编码的函数。不必每次都存入文件中,如果是雷同的字符串,应用字符串编码的函数和输入到文件中的内容是一样的乱码的二进制内容。
<code class="php">$str = "Test compress String"; $bzstr = bzcompress($str, 9); echo $bzstr, PHP_EOL; // BZh91AY&SY��J���@ // // �� 1 // df����2�h>.�p�!��// $newStr = bzdecompress($bzstr); echo $newStr, PHP_EOL; $chineseStr = "测试"; $bzstr = bzcompress($chineseStr, 9); echo bzdecompress($bzstr), PHP_EOL;
bzcompress() 用于将字符串进行编码压缩,第二个参数是压缩的比率,9 为最高等级。编码后的内容是非人类的二进制乱码内容。bzdecompress() 用于对已编码的内容进行解码。置信不少小伙伴曾经发现了,这个能够用来做一些窃密内容的加密传输。同时,在测试代码中,咱们能够看到,它对中文也是失常反对的。
错误信息
最初,咱们来看一下 Bzip2 的谬误处理函数。
<code class="php">$bz = bzopen('/tmp/test.bz', 'r'); bzwrite($bz, 'aaa'); print_r(bzerror($bz)); // Array // ( // [errno] => -1 // [errstr] => SEQUENCE_ERROR // ) echo bzerrno($bz), PHP_EOL; // -1 echo bzerrstr($bz), PHP_EOL; // SEQUENCE_ERROR bzclose($bz);
咱们首先结构了一个谬误环境。应用 “r” 关上文件取得句柄后,对这个文件进行写入操作。bzerror() 会返回一个错误信息的数组,外面蕴含了谬误号和谬误信息内容。而 bzerrno() 和 bzerrstr() 则是独自地别离返回谬误号和谬误内容。三个非常简单并且好了解的函数。
总结
这个扩大还是非常简单的,最次要的是 Bzip2 这种压缩文件类型也并不是十分罕用的类型,所以可能晓得的人并不多。然而咱们还是从中发现了一丝丝的惊喜,就是它提供了字符串的编解码函数,这两个函数的确是能够在某些场景下作为信息加密的伎俩来应用。
测试代码:
参考文档:
https://www.php.net/manual/zh/book.bzip2.php
各自媒体平台均可搜寻【硬核项目经理】