这里有新鲜出炉的 PHP 教程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
本文介绍了 php 中序列化与反序列化的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
把复杂的数据类型压缩到一个字符串中
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
eg:
- $stooges = array('Moe','Larry','Curly');
- $new = serialize($stooges);
- print_r($new);echo "<br />";
- print_r(unserialize($new));
结果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}
Array ([0] => Moe [1] => Larry [2] => Curly )
当把这些序列化的数据放在 URL 中在页面之间会传递时,需要对这些数据调用 urlencode(),以确保在其中的 URL 元字符进行处理:
- $shopping = array('Poppy seed bagel' = >2, 'Plain Bagel' = >1, 'Lox' = >4);
- echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'" rel="external nofollow" >next</a>';
margic_quotes_gpc 和 magic_quotes_runtime 配置项的设置会影响传递到 unserialize() 中的数据。
如果 magic_quotes_gpc 项是启用的,那么在 URL、POST 变量以及 cookies 中传递的数据在反序列化之前必须用 stripslashes() 进行处理:
- $new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启
- $new_cart = unserialize($cart);
如果 magic_quotes_runtime 是启用的,那么在向文件中写入序列化的数据之前必须用 addslashes() 进行处理,而在读取它们之前则必须用 stripslashes() 进行处理:
- $fp = fopen('/tmp/cart', 'w');
- fputs($fp, addslashes(serialize($a)));
- fclose($fp);
- //如果magic_quotes_runtime开启
- $new_cat = unserialize(stripslashes(file_get_contents('/tmp/cart')));
- //如果magic_quotes_runtime关闭
- $new_cat = unserialize(file_get_contents('/tmp/cart'));
在启用了 magic_quotes_runtime 的情况下,从数据库中读取序列化的数据也必须经过 stripslashes() 的处理,保存到数据库中的序列化数据必须要经过 addslashes() 的处理,以便能够适当地存储。
- mysql_query("insert into cart(id,data) values(1,'".addslashes(serialize($cart))."')");
- $rs = mysql_query('select data from cart where id=1');
- $ob = mysql_fetch_object($rs);
- //如果magic_quotes_runtime开启
- $new_cart = unserialize(stripslashes($ob - >data));
- //如果magic_quotes_runtime关闭
- $new_cart = unserialize($ob - >data);
当对一个对象进行反序列化操作时,PHP 会自动地调用其__wakeUp() 方法。这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如:数据库连接等。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持 PHPERZ!
来源: http://www.phperz.com/article/17/0811/340561.html