PHP的bz2压缩扩展工具

在日常的开发和电脑使用中,我们经常会接触到压缩和解压的一些工具,PHP 也为我们准备了很多相关的操作扩展包,都有直接可用的函数能够方便的操作一些压缩解压功能。今天,我们先学习一个比较简单但不太常用的压缩格式:Bzip2。

安装扩展

这个扩展的安装需要系统有 bzip2-devel 。所以我们需要先给系统装上这个软件包的支持,然后这个扩展是随 PHP 安装包一起发布的,所以只需要编译一下 PHP ,并在 ./configure 中添加对应的编译命令即可。

# yum install bzip2-devel
# ./configure xxxx --with-bz2
# make && make install

基本操作

Bzip2 提供的函数不多,而且非常简单,我们首先来看的是将字符串保存到一个文件中。

$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.bzbzclose($bz);$bz = bzopen('/tmp/test.bz', 'r');$v = bzread($bz);
echo $v, PHP_EOL;
// This is Bz Compressbzclose($bz);

就和文件操作函数一样,我们需要先通过 bzopen() 打开文件获得句柄。然后使用 bzwrite() 来写入文件,并使用 bzread() 来读取文件。最后使用 bzclose() 来关闭文件。

这里需要注意的是 bzopen() 的第二个参数,也就是文件打开的形式,只能写 "w" 或者 "r" 。没有其它类型,并且不能同时读写,也就是不能写成 "wr" 这种形式。所以我们在写完文件后又要再使用 "r" 打开文件才能进行读取。

读取长度设置

$bz = bzopen('/tmp/test.bz', 'r');$v = bzread($bz, 10);
echo $v, PHP_EOL;
// This is Bz$v = bzread($bz);
echo $v, PHP_EOL;
//  Compressbzclose($bz);

bzread() 的第二个参数是可选的字节长度,默认是 1024 ,一次最大可读入 8192 个未压缩字节。

字符串编码

Bzip2 扩展还为我们提供了直接对字符串编码的函数。这样我们的压缩内容就可以不用每次都存入文件中,如果是相同的字符串,使用字符串编码的函数和输出到文件中的内容是一样的乱码的二进制内容。

$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 的错误处理函数。

$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_ERRORbzclose($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

PHP的bz2压缩扩展工具相关推荐

  1. PHP的LZF压缩扩展工具

    PHP的LZF压缩扩展工具 这次为大家带来的是另外一个 PHP 的压缩扩展,当然也是非常冷门的一种压缩格式,所以使用的人会比较少,而且在 PHP 中提供的相关的函数也只是对字符串的编码与解码,并没有针 ...

  2. Linux下的压缩解压缩工具(转载)

    一.Linux压缩工具概述 在Linux系统中,提供了许多压缩工具,虽然方便,但也难免造成一些混乱.笔者通过一段时间的整理,将它们理一理顺,希望能够对大家有所帮助: 首先,我们看一下下面这张" ...

  3. linux安装bz2压缩文件,Linux下*.tar.gz/.tar.bz2 文件解压缩安装命令

    Linux tar 命令 在Linux平台,tar是主要的打包工具.tar命令通常用来把文件和目录压缩为一个文件( tarball 或 tar, gzip 和 bzip). Tar选项: c – 创建 ...

  4. 适用于linux的解压工具,Linux下的压缩/解压缩工具

    Linux下的压缩/解压缩工具 发布时间:2006-11-12 00:54:48来源:红联作者:philosophy 一.Linux压缩工具概述 在Linux系统中,提供了许多压缩工具,虽然方便,但也 ...

  5. img解包工具_3、Linux基础命令篇、压缩打包工具

    在管理系统中,我们遇到经常会使用后缀为*.tar.gz |*.tar.bz2 等文件,他们是什么文件呢?请看下面介绍及使用方法 压缩的原理,比如一个字符串"www.baidu.com&quo ...

  6. Chrome 扩展工具及命令

    一些Chrome的地址栏命令(这些命令会不停的变动,所有不一定都是好用的) 在Chrome的浏览器地址栏中输入以下命令,就会返回相应的结果.这些命令包括查看内存状态,浏览器状态,网络状态,DNS服务器 ...

  7. 最优秀好用的免费文件压缩/解压缩工具软件 —— Bandizip

    最优秀好用的免费文件压缩/解压缩工具软件 -- Bandizip,可以替代WinRAR与7-Zip,我用的目前是好压唉,就是2345的好压~其实没有发现哪里不好,用了下 Bandizip,还是 Ban ...

  8. tar/gz/bz/gz2/bz2...压缩与解压缩

    *.gz2用gunzip2 *.gz2 For examplegunzip2 *.tar.gz2,解出一个*.tar文件, 然后tar -vxf *.tar即可 .rar格式 解压:[*******] ...

  9. xz-5.0.3.tar.bz2解压工具

    页面下载xz-5.0.3.tar.bz2解压工具,然后编译安装 tar -xf xz-5.0.3.tar cd xz-5.0.3 ./configure make make install 这样就可以 ...

最新文章

  1. tidb mysql 协议_TiDB源码阅读(二) TiDB中的MySQL协议
  2. CentOS7下查询硬件信息
  3. spring31-1: 事务-传播行为
  4. 删除隐藏版本信息 版本回退_Git系列之-分布式版本控制Git详解
  5. phpStorm2018安装教程
  6. selenium+python中,框架中,怎么返回上一个菜单
  7. 你不知道的JS(this)---#
  8. 嵌入式软件架构设计分层思路
  9. SQLite3中核心C API
  10. Python 之 单例
  11. 详解k8s一个完整的监控方案(Heapster+Grafana+InfluxDB) - kubernetes
  12. RabbitMQ(7)-发后即忘模型
  13. 多linux服务器之间实现文件自动复制(脚本)
  14. Get Intellisense for .axml files in Visual Studio
  15. 图文配置docker阿里云加速器教程
  16. linux 内核 触摸屏,7. Linux - 触摸屏(电阻屏)驱动程序实现
  17. 软件测试的目的和原则
  18. apache创建虚拟主机
  19. 北京折叠——一部刚要开始就已经结束的科幻小说
  20. 阿里巴巴前端知识图谱

热门文章

  1. Amazon Personalize 个性化效果评估,从准确性到多样性、新颖性和偶然性
  2. HTML+CSS-项目:学成在线
  3. Stack Overflow 的 HTTPS 化:漫漫长路的终点
  4. main函数带有参数
  5. 基于ADS的功分、耦合器的设计
  6. [Audio]基础声电-THD分析
  7. IT 圈所谓的凛冬将至
  8. 利用USRP探索软件无线电(3)
  9. 扶着墙进去,扶着墙出来
  10. c# 备份oracle waitforexit()方法死锁,从过程的空的stdout原因同步读数据死锁[重复](Synchronized reading dat...