PHP的bz2压缩扩展工具
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.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" 打开文件才能进行读取。
读取长度设置
$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 扩展还为我们提供了直接对字符串编码的函数。这样我们的压缩内容就可以不用每次都存入文件中,如果是相同的字符串,使用字符串编码的函数和输出到文件中的内容是一样的乱码的二进制内容。
$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_ERROR
bzclose($bz);
我们首先构造了一个错误环境。使用 "r" 打开文件获得句柄后,对这个文件进行写入操作。bzerror() 会返回一个错误信息的数组,里面包含了错误号和错误信息内容。而 bzerrno() 和 bzerrstr() 则是单独地分别返回错误号和错误内容。三个非常简单并且好理解的函数。
总结
这个扩展还是非常简单的,最主要的是 Bzip2 这种压缩文件类型也并不是非常常用的类型,所以可能知道的人并不多。但是我们还是从中发现了一丝丝的惊喜,就是它提供了字符串的编解码函数,这样的话,这两个函数就可以在某些场景下作为信息加密的手段来使用。
- 每日一水之strcmp用法
- HDU 3782 xxx定律
- HDU 2566 统计硬币
- HDU 2561 第二小整数
- python基础-数据类型与变量
- HDU 2520 我是菜鸟,我怕谁
- HUST 1586 数字排列
- next_permutation(全排列算法)
- Hadoop数据分析平台实战——100HBase和MapReduce整合离线数据分析平台实战——100HBase和MapReduce整合
- Hadoop数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)离线数据分析平台实战——120Hive Shell命令介绍 01(熟悉Hive略过)
- HUST 1588 辗转数对
- HUST 1584 摆放餐桌
- HUST 1585 排队
- 【QQ/微信个人号变身机器人】炸群+远程监控个人PC的尝试
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- centos7.2.1511安装jdk1.8.0_151及mysql5.6.38的方法
- Linux CentOS使用crontab设置定时重启的方法
- centos安装php5、卸载php、安装php7的教程
- centos7中crontab定时计划任务5分钟一次命令写法
- Ubuntu16.04 安装Teamviewer的教程详解
- 01 . OpenResty简介部署,优缺点,压测,适用场景及用Lua实现服务灰度发布
- 详解Linux iptables 命令
- 详解fedora 开启 apache 并 开启目录浏览模式
- CentOS新建用户并使能密钥登录的方法
- Linux系统扩容根目录磁盘空间的操作方法
- Linux如何查看进程栈信息示例
- linux查看硬盘大小与挂载硬盘的实现
- centos6.5 安装hadoop1.2.1的教程详解【亲测版】
- Linux中没有rc.local文件的完美解决方法
- 详解linux lcd驱动编写