莫相离 发表于 2015-2-3 23:41:29

PHP编程:php park、unpark、ord 函数利用办法(...

PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。   park,unpark,ord这3个函数,在咱们任务中,用到它们的估量不多。 我在比来一个任务中,由于通信需求用到二进制流,然后接口用php吸收。事先在处置时分,查阅很多材料。由于它们利用的确对照少,也很少伴侣任务中会用到它们。 在任务中,我也逐步懂得到park,unpark,ord关于二进制字节处置的壮大。 上面我一一引见它们。

park,unpark,ord函数利用引见
park函数申明:本函数用来将材料紧缩打包到位的字符串当中。

语法:pack(format,args+)
参数 描写 format 必须。划定在包装数据时所利用的格局。 args+ 可选。划定被包装的一个或多个参数。
字符 申明 a 将字符串空白以 NULL 字符填满 A 将字符串空白以 SPACE 字符 (空格) 填满 h 十六进位字符串,低位在前 H 十六进位字符串,高位在前 c 有号字符 C 无号字符 s 有号短整数 (十六位,依盘算机的位按次) S 无号短整数 (十六位,依盘算机的位按次) n 无号短整数 (十六位, 高位在后的按次) v 无号短整数 (十六位, 低位在后的按次) i 有号整数 (依盘算机的按次及局限) I 无号整数 (依盘算机的按次及局限) l 有号长整数 (卅二位,依盘算机的位按次) L 无号长整数 (卅二位,依盘算机的位按次) N 无号短整数 (卅二位, 高位在后的按次) V 无号短整数 (卅二位, 低位在后的按次) f 单准确浮点数 (依盘算机的局限) d 倍准确浮点数 (依盘算机的局限) x 空位 X 倒回一名 @ 填入 NULL 字符到相对地位
unpark函数申明:本函数用来将位的字符串的材料解紧缩
语法:unpack(format,args+)
参数 描写 format 必须。划定在包装数据时所利用的格局。 args+ 可选。划定被包装的一个或多个参数。 参数与park不异。
ord函数申明:前往对应字符的acill码值
语法:ord($character);
实例申明:
复制代码 代码以下:
<?php
//A字符
$str=(pack("A*", "中国"));
echo $str,"=",strlen($str),"字节\n";
getAscill($str);
//H字符
$str=(pack("H*", "fffe"));
echo $str,"=",strlen($str),"字节\n";
getAscill($str);
//C字符
$str=(pack("C*", "55","56","57"));
echo $str,"=",strlen($str),"字节\n";
getAscill($str);

//i字符 短整形 32位 4个字节 64位8个字节
$str=(pack("i", "100"));
echo $str,"=",strlen($str),"字节\n";
getAscill($str);

//s字符 短整形 2个字节
$str=(pack("s", "100"));
echo $str,"=",strlen($str),"字节\n";
getAscill($str);

//l字符 长整形 4个字节
$str=(pack("l", "100"));
echo $str,"=",strlen($str),"字节\n";
getAscill($str);

//f字符 单精度浮点 4个字节
$str=(pack("f", "100"));
echo $str,"=",strlen($str),"字节\n";
getAscill($str);

//d字符 双精度浮点 8个字节
$str=(pack("d", "100"));
echo $str,"=",strlen($str),"字节\n";
getAscill($str);

function getAscill($str)
{
$arr=str_split($str);
foreach ($arr as $v)
{
echo $v,"=",ord($v),"\n";
}
echo "=============\r\n\r\n";
}


经由过程下面实例,咱们可以看到,不异字符串,用分歧格局存储,所占用的字节数分歧。 这里也能够看到,以分歧格局保留字符可以达存储节俭空间。并且启到不成读加密后果。 俄然想到一点,设计数据库字段类型成绩,假如一个字段只是:10位长度整型。咱们设置为整形:256*256*256*256 就4个字节,假如设置为10个长度字符串。那就占10个字节。全部消化空间就是2倍的。 设置准确字符类型对进步数据库功能有良多匡助。呵呵,有点跑题了……

php处置字节码通信实例剖析
方才说的pack感化:节俭空间、加密格局

上面就这2个做一个实例申明,接口开辟请求:
参数 描写 用户名 20字节,字符型 暗码 10字节,字符型 岁数 1字节,无符char型 出身年代 4字节,整型(19800101) 邮箱 50字节,字符串 各字段间用:"\0"朋分A、PACK封包
复制代码 代码以下:
<?php
$code=array(
"username"=>array("A20","张三adfb12"),
"pass"=>array("A10","asdf*#1"),
"age"=>array("C","23"),
"birthday"=>array("I","19900101"),
"email"=>array("A50","zhangsan@163.com"));

$stream=join("\0",parkByArr($code));
echo $stream,strlen($stream);


复制代码 代码以下:
file_put_contents("c:/1.txt",$stream);//将流保留起来便于上面读取

function parkByArr($arr)
{
$atArr=array();
foreach ($arr as $k=>$v)
{
$atArr[]=pack($v,$v);
}
return $atArr;
}
function getAscill($str)
{
$arr=str_split($str);
foreach ($arr as $v)
{
echo $v,"=",ord($v),"\n";
}
}

由于用”\0”朋分,全部长度是89字节。经由过程下面输入,有一些字符串输入是可以读取的,其它都已酿成乱码了。这也是我说可以保密后果缘由。
B、Unpack解包
解包需求依照,打包体例读取,该读取多长,该用甚么类型读取,必需与打包划定一样。
复制代码 代码以下:
<?php
$code=array(
"username"=>array("A20"),
"pass"=>array("A10"),
"age"=>array("C"),
"birthday"=>array("I"),
"email"=>array("A50"));
$stream=file_get_contents("c:/1.txt");
var_dump(parkByArr($stream,$code));
function parkByArr($str,$code)
{
$Arr=explode("\0",$str);
$atArr=array();
$i=0;
foreach ($code as $k=>$v)
{
$atArr[$k]=unpack($v,$Arr[$i]);
$i++;
}
return $atArr;
}


虽说不上很好,但至少一般的数据操作,再在原有的SQL语言的基础上,用得还是可以的。

山那边是海 发表于 2015-2-4 06:03:50

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

小妖女 发表于 2015-2-4 06:12:14

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

海妖 发表于 2015-2-5 14:42:04

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

小女巫 发表于 2015-2-6 04:25:01

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

兰色精灵 发表于 2015-2-15 12:32:14

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

分手快乐 发表于 2015-3-3 11:50:09

本文当是我的笔记啦,遇到的问题随时填充

柔情似水 发表于 2015-3-11 10:40:28

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

蒙在股里 发表于 2015-3-15 13:03:09

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

灵魂腐蚀 发表于 2015-3-17 17:09:44

做为1门年轻的语言,php一直很努力。

老尸 发表于 2015-3-24 12:50:10

个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。

小魔女 发表于 2015-3-27 11:56:55

基础有没有对学习php没有太大区别,关键是兴趣。

再现理想 发表于 2015-4-1 21:08:48

最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。

第二个灵魂 发表于 2015-4-3 02:18:14

做为1门年轻的语言,php一直很努力。

再见西城 发表于 2015-4-4 12:51:53

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

愤怒的大鸟 发表于 2015-4-4 23:32:22

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

透明 发表于 2015-4-19 05:10:32

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

活着的死人 发表于 2015-5-6 17:50:39

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

飘飘悠悠 发表于 2015-5-7 16:29:42

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

不帅 发表于 2015-5-9 06:43:56

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
页: [1] 2
查看完整版本: PHP编程:php park、unpark、ord 函数利用办法(...