PHP中序列化和反序列化
来源:互联网 发布:溢思得瑞人工智能 编辑:程序博客网 时间:2024/05/21 18:22
把复杂的数据类型压缩到一个字符串中
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
$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";}
结果含义讲解:a(数组):3(有三个属性):{i(数组标号):0;s(字符串):3(字符串数据大小):"Moe"(字符串内容);i:1;s:5:"Larry";i:2;s:5:"Curly";}
Array ( [0] => Moe [1] => Larry [2] => Curly )结果含义讲解:a(数组):3(有三个属性):{i(数组标号):0;s(字符串):3(字符串数据大小):"Moe"(字符串内容);i:1;s:5:"Larry";i:2;s:5:"Curly";}
当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理:
$shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4);echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'">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()方法。这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如:数据库连接等。
0 0
- PHP中序列化和反序列化
- PHP - 序列化和反序列化
- php序列化和反序列化
- PHP 序列化和反序列化
- PHP中序列号和反序列化
- 序列和反序列化
- 序列和反序列化
- php中序列化与反序列化
- php中序列化与反序列化
- php中序列化与反序列化
- php中序列化与反序列化
- php中序列化与反序列化
- php中序列化与反序列化
- php中序列化与反序列化
- php中序列化与反序列化
- php中序列化与反序列化
- php的序列化和反序列化
- PHP序列化反序列化serialize和unserialize函数
- [JSP]Cookie操作陷阱
- 在构造函数中使用new时应注意的事项、析构函数调用
- Qt 5.x 应用程序 Windows 部署方法
- 【树状数组】HUD1556 区间修改单点求值
- Clojure的头保持问题
- PHP中序列化和反序列化
- /usr/local/lib/libz.a: could not read symbols: Bad value
- 在win7下安装Ubuntu 14.04
- Struts2中文国际化乱码问题
- Algorithm学习笔记 --- 珍惜现在,感恩生活
- Pig FOREACH 嵌套循环
- selector中各个属性的意思
- 开篇
- 重装mysql无法启动mysql服务的解决方法: