听过pack,但是不知道是做什么的,做websocket的时候,看到pack的代码,看不懂,抽空研究一下 pack的优势就是压缩长字符串,另外有一定的加密作用,因为pack的方式不告知调用方,是不知道的,个人觉得破解的难度应该不大,跟数据的复杂度成正比
代码:
// 我们打包一段有意义的字符串
// 名字:张三,年龄:10岁;
// 普通字符串形式
$str = 'name:张三,age:10';
// 普通字符串长度
echo strlen($str).PHP_EOL;
// pack打包 【a代表字符串,后面的数字代表长度 ,1个中文按照3个字节算;s代表短整数(能表示-128~127的数字),所有参数见文尾】
$pack = pack("a4a6a3s", 'name', '哈哈','age',10); // "a4a6a3s"代表打包的格式,也就是密钥了,解包的时候要按照同样的格式去解包
// 输出打包后二进制字符串
echo $pack.PHP_EOL;
// pack后二进制字符串长度
echo strlen($pack).PHP_EOL;
// unpack解包
print_r(unpack('a4field1/a6field2/a3field3/sfield4',$pack));// 解包格式跟打包的时候要一致,后面跟字段名,格式直接用“/”分割
执行结果:
我们看到长度被压缩了3个字节
~ 结束 ~
打包参数详见:https://www.runoob.com/php/func-misc-pack.html
这个是打包/解包的参数截图