zhouu 发表于 2017-4-10 09:55:24

PHP串行化(序列化)和反串行化

  这个和java的序列话是一样的。只是java要实现Serializable这个空接口。
  

  serialize() 把变量和它们的值编码成文本形式

  unserialize()
恢复原先变量

  

什么情况下需要序列化
当你想把的内存中的对象写入到硬盘 数据库的时候;
当你想在网络上传送对象的时候;

  当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理

  

margic_quotes_gpc和magic_quotes_runtime配置项的设置会影响传递到unserialize()中的数据。


如果magic_quotes_gpc项是启用的,那么在URL、POST变量以及cookies中传递的数据在反序列化之前必须用stripslashes()进行处理:


如果magic_quotes_runtime是启用的,那么在向文件中写入序列化的数据之前必须用addslashes()进行处理,而在读取它们之前则必须用stripslashes()进行处理:
  

  也可用array,把一个数组对象系列化。

<?php
class Data{
var $index;
var $name;
function __construct($index,$name){
$this->index = $index;
$this->name = $name;
}
}
$data1 = new Data(1, "hello");
$data2 = new Data(2, "world");
$arr = array();
//用ArrayObject也可以。
//$arr = new ArrayObject();
$arr = $data1;
$arr = $data2;
$str = serialize($arr);
$file = fopen("tmp.txt", "w");
fwrite($file, $str);
fclose($file);
//$file =fopen("tmp.txt", "r");
$data = file_get_contents("tmp.txt");
//反序列化得到原来的数组对象。
$obj = unserialize($data);
print_r($obj);
echo $obj->name;
?>


tmp.txt的内容为:
a:2:{i:0;O:4:"Data":2:{s:5:"index";i:1;s:4:"name";s:5:"hello";}i:1;O:4:"Data":2:{s:5:"index";i:2;s:4:"name";s:5:"world";}}
页: [1]
查看完整版本: PHP串行化(序列化)和反串行化