设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间14 现在时间14 缓存数据 别人唱歌换气声好难听。。怎么到这里就觉得很合适

别人唱歌换气声好难听。。怎么到这里就觉得很合适 -- Wonderful U (Demo Version)

查看: 1410|回复: 2

PHP的bz2压缩扩展工具详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:22
  • 打卡月天数:0
  • 打卡总奖励:266
  • 最近打卡:2025-04-13 23:10:29
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
444
主题
404
精华
0
金钱
1562
积分
892
注册时间
2023-2-10
最后登录
2025-5-31

发表于 2023-2-12 20:08:29 | 显示全部楼层 |阅读模式
在日常的开发和电脑使用中,我们经常会接触到压缩和解压的一些工具,PHP 也为我们准备了很多相关的操作扩展包,都有直接可用的函数能够方便的操作一些压缩解压功能。
安装扩展

这个扩展的安装需要系统有 bzip2-devel 。所以我们需要先给系统装上这个软件包的支持,然后这个扩展是随 PHP 安装包一起发布的,所以只需要编译一下 PHP ,并在 ./configure 中添加对应的编译命令即可。
  1. # yum install bzip2-devel
  2. # ./configure xxxx --with-bz2
  3. # make && make install
复制代码
基本操作

Bzip2 提供的函数不多,而且非常简单,我们首先来看的是将字符串保存到一个文件中。
  1. $bz = bzopen('/tmp/test.bz', 'w');
  2. // -rw-r--r-- 1 root root 14 Jun 28 09:51 test.bz

  3. $text = "This is Bz Compress";
  4. bzwrite($bz, $text);
  5. // -rw-r--r-- 1 root root 59 Jun 28 09:53 test.bz

  6. bzclose($bz);

  7. $bz = bzopen('/tmp/test.bz', 'r');

  8. $v = bzread($bz);
  9. echo $v, PHP_EOL;
  10. // This is Bz Compress

  11. bzclose($bz);
复制代码
就和文件操作函数一样,我们需要先通过 bzopen() 打开文件获得句柄。然后使用 bzwrite() 来写入文件,并使用 bzread() 来读取文件。最后使用 bzclose() 来关闭文件。
这里需要注意的是 bzopen() 的第二个参数,也就是文件打开的形式,只能写 "w" 或者 "r" 。它没有其它类型,并且不能同时读写,也就是不能写成 "wr" 这种形式。所以我们在写完文件后又要再使用 "r" 打开文件才能进行读取。
读取长度设置
  1. $bz = bzopen('/tmp/test.bz', 'r');

  2. $v = bzread($bz, 10);
  3. echo $v, PHP_EOL;
  4. // This is Bz

  5. $v = bzread($bz);
  6. echo $v, PHP_EOL;
  7. //  Compress

  8. bzclose($bz);
复制代码
bzread() 的第二个参数是可选的字节长度,默认是 1024 ,一次最大可读入 8192 个未压缩字节。
字符串编码

Bzip2 扩展还为我们提供了直接对字符串编码的函数。不用每次都存入文件中,如果是相同的字符串,使用字符串编码的函数和输出到文件中的内容是一样的乱码的二进制内容。
  1. $str = "Test compress String";

  2. $bzstr = bzcompress($str, 9);
  3. echo $bzstr, PHP_EOL;
  4. // BZh91AY&SY��J���@
  5. //
  6. // �� 1
  7. // df����2�h>.�p�!��//

  8. $newStr = bzdecompress($bzstr);
  9. echo $newStr, PHP_EOL;

  10. $chineseStr = "测试";
  11. $bzstr = bzcompress($chineseStr, 9);
  12. echo bzdecompress($bzstr), PHP_EOL;
复制代码
bzcompress() 用于将字符串进行编码压缩,第二个参数是压缩的比率,9 为最高等级。编码后的内容是非人类的二进制乱码内容。bzdecompress() 用于对已编码的内容进行解码。相信不少小伙伴已经发现了,这个可以用来做一些保密内容的加密传输。同时,在测试代码中,我们可以看到,它对中文也是正常支持的。
错误信息

最后,我们来看一下 Bzip2 的错误处理函数。
  1. $bz = bzopen('/tmp/test.bz', 'r');
  2. bzwrite($bz, 'aaa');
  3. print_r(bzerror($bz));
  4. // Array
  5. // (
  6. //     [errno] => -1
  7. //     [errstr] => SEQUENCE_ERROR
  8. // )

  9. echo bzerrno($bz), PHP_EOL; // -1
  10. echo bzerrstr($bz), PHP_EOL; // SEQUENCE_ERROR

  11. 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
以上就是PHP的bz2压缩扩展工具详解的详细内容,更多关于php bz2扩展的资料请关注晓枫资讯其它相关文章!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
20
积分
20
注册时间
2022-12-26
最后登录
2022-12-26

发表于 2024-10-29 19:34:20 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:13
  • 最近打卡:2024-10-01 08:19:55
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
25
积分
4
注册时间
2023-11-13
最后登录
2024-10-1

发表于 4 天前 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表