仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1856|回复: 20
打印 上一主题 下一主题

[学习教程] PHP编程:php park、unpark、ord 函数利用办法(...

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:41:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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[0],$v[1]);
}
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[0],$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是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
小女巫 该用户已被删除
5#
发表于 2015-2-6 04:25:01 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
兰色精灵 该用户已被删除
6#
发表于 2015-2-15 12:32:14 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
分手快乐 该用户已被删除
7#
发表于 2015-3-3 11:50:09 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
柔情似水 该用户已被删除
8#
发表于 2015-3-11 10:40:28 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
蒙在股里 该用户已被删除
9#
发表于 2015-3-15 13:03:09 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-17 17:09:44 | 只看该作者
做为1门年轻的语言,php一直很努力。
老尸 该用户已被删除
11#
发表于 2015-3-24 12:50:10 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
小魔女 该用户已被删除
12#
发表于 2015-3-27 11:56:55 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
再现理想 该用户已被删除
13#
发表于 2015-4-1 21:08:48 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
第二个灵魂 该用户已被删除
14#
发表于 2015-4-3 02:18:14 | 只看该作者
做为1门年轻的语言,php一直很努力。
再见西城 该用户已被删除
15#
发表于 2015-4-4 12:51:53 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
愤怒的大鸟 该用户已被删除
16#
发表于 2015-4-4 23:32:22 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
透明 该用户已被删除
17#
发表于 2015-4-19 05:10:32 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
活着的死人 该用户已被删除
18#
发表于 2015-5-6 17:50:39 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
飘飘悠悠 该用户已被删除
19#
发表于 2015-5-7 16:29:42 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
不帅 该用户已被删除
20#
发表于 2015-5-9 06:43:56 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 03:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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