序列化serialize()与反序列化unserialize():

序列化serialize():就是将一个变量所代表的 “内存数据”转换为“字符串”的形式,并持久保存在硬盘(写入文件中保存)上的一种做法,即,把“内存数据”转换为“字符串”然后保存到文件中;

反序列化unserialize():就是将序列化之后保存在硬盘(文件)上的“字符串数据”恢复为其原来的内存形式的变量数据的一种做法,即,把文件中保存的序列化后的“字符串数据”恢复为“内存数据”;

对象的序列化:1.对一个对象进行序列化,只能将其属性数据“保存起来”,而方法被忽略(方法不是数据),但是类名也能被保存起来,因此反序列化的位置只要有该类文件,就仍然可以将对象还原,即该对象的属性和方法依然可以使用;

2.对象序列化的时候,会自动调用该对象所属类的__sleep()魔术方法;

对象的反序列化:1.对一个对象进行反序列化,其实是恢复原来保存起来的属性数据,而且,此时必须需要依赖该对象原来的所属类;

2.对象反序列化的时候,会自动调用该对象所属类的__wakeup()魔术方法;

总结:一般当我们需要将数据保存到文件中时会用到序列化,保存到数据库中一般不这样用,因为序列化和反序列化的过程其实很耗时;

使用实例如下:

<?php
/*
* 对基本数据进行序列化和反序列化
* */
$v1 = 1 ;
$v2 = "abc" ;
$v3 = false ;
$v4 = array(41,42,43) ;
/*再对它们进行序列化*/
$str1 = serialize($v1) ;//将内存数据转换为字符串
$str2 = serialize($v2) ;
$str3 = serialize($v3) ;
$str4 = serialize($v4) ;
file_put_contents("./file1.txt",$str1) ;//将序列化后的字符串数据保存到硬盘(文件)中
file_put_contents("./file2.txt",$str2) ;//将序列化后的字符串数据保存到硬盘(文件)中
file_put_contents("./file3.txt",$str3) ;//将序列化后的字符串数据保存到硬盘(文件)中
file_put_contents("./file4.txt",$str4) ;//将序列化后的字符串数据保存到硬盘(文件)中
/*再对它们进行反序列化*/
$str1 = file_get_contents('./file1.txt') ;//读取硬盘(文件)上保存的序列化后的字符串数据
$str2 = file_get_contents('./file2.txt') ;//读取硬盘(文件)上保存的序列化后的字符串数据
$str3 = file_get_contents('./file3.txt') ;//读取硬盘(文件)上保存的序列化后的字符串数据
$str4 = file_get_contents('./file4.txt') ;//读取硬盘(文件)上保存的序列化后的字符串数据
$v1 = unserialize($str1) ; //将序列化后的“字符串数据”反序列化为“内存数据”
$v2 = unserialize($str2) ; //将序列化后的“字符串数据”反序列化为“内存数据”
$v3 = unserialize($str3) ; //将序列化后的“字符串数据”反序列化为“内存数据”
$v4 = unserialize($str4) ; //将序列化后的“字符串数据”反序列化为“内存数据”
/*
* 对象的序列化和反序列化
* */
/*当new一个类的对象时,若该类不存在,就会自动调用该方法来加载所需要的类文件*/
function __autoload($className){//php的自动加载类,参数为类名,类文件命名规则为:类名.class.php
$fileName = "./".$className.".class.php" ;
include_once $fileName ;
}
$obj1 = new MP3Player();
$name1 = $obj1 ->name ;
$obj1 ->dataIn() ;
$obj1 ->next() ;
/*序列化对象*/
$s1 = serialize($obj1) ;//将obj1对象转换为字符串数据
file_put_contents('./obj1.txt',$s1) ;//保存在硬盘(文件)中
/*反序列化对象*/
$s1 = file_get_contents('./obj1.txt') ;//读取硬盘上的字符串数据
$obj2 = unserialize($s1) ;//将序列化后的字符串数据还原为内存数据
$name2 = $obj2 ->name ;
/*虽然序列化后只保存了对象的属性数据而没有保存对象的方法,但是其保存了对象的类名,
*所以进行反序列化后对象内的方法任然存在,仍然可以供对象调用,反序列化的过程
* 就是对原来对象进行恢复的过程*/
$obj2 ->dataIn() ;
$obj2 ->next() ;

  

php serialize(),unserialize()的更多相关文章

  1. PHP serialize && unserialize Security Risk Research

    目录 . 序列化的定义 . serialize:序列化 . unserialize:反序列化 . 序列化.反序列化存在的安全风险 . Use After Free Vulnerability -] . ...

  2. serialize unserialize

    转自 http://www.cnblogs.com/yeer/archive/2009/03/25/1421161.html php函数serialize()与unserialize()   seri ...

  3. php -- 用文本来存储内容,file_put_contents,serialize,unserialize

    根据存储的内容来划分 字符串: file_put_contents :将一个字符串写入文件 语法:int file_put_contents ( string $filename , mixed $d ...

  4. phpMyadmin /scripts/setup.php Execute Arbitrary PHP Code Via unserialize Vul Object Injection PMASA-2010-4

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对这个漏洞简单的概括如下 . "/scripts/setup.php&q ...

  5. PHP json_encode/json_decode与serialize/unserializ性能测

    PHP里面,有时候出于实际需求考虑,需要将某些信息以数组的方式进行存储,甚至有时候介于数组.字符串两者之间,很难确定是数组还是字符串,如果最终还需要将这些信息存储到文件系统中,而且要保证正确无误的存储 ...

  6. PHP中的__toString方法(实现JS里的链式操作)

    _toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错 Catchable fatal error: Object of class String could not be co ...

  7. php配置参数.md

    php 5.5 配置文件 php.ini Options user_ini.filename string 设定了 PHP 会在每个目录下搜寻的文件名:如果设定为空字符串则 PHP 不会搜寻.默认值是 ...

  8. 大公司的PHP面试题

    1. 禁用COOKIE 后 SEESION 还能用吗? 2. 抓取远程图片到本地,你会用什么函数? 4. 你觉得在pV10W的时候, 同等配置下,LUNIX 比WIN快多少? 5. 简述pOST 和G ...

  9. PHP面试题4

    在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 答:echo $_SERVER['PHP_SELF']; echo $ ...

随机推荐

  1. 可以精准解析国内外网站的DNS

    Pure DNS https://puredns.cn/ XsicoDNS https://dns.xsico.cn/ Fun DNS http://www.fundns.cn/ Bai DNS ht ...

  2. NPOI的一些基本操作

    1,创建一个Excel //创建一个工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); //创建一个页 ISheet sheet = workbook.Cr ...

  3. 第六节,TensorFlow编程基础案例-保存和恢复模型(中)

    在我们使用TensorFlow的时候,有时候需要训练一个比较复杂的网络,比如后面的AlexNet,ResNet,GoogleNet等等,由于训练这些网络花费的时间比较长,因此我们需要保存模型的参数. ...

  4. malloc()

    malloc()没啥好讲的,唯一要注意的就是与new的区别 malloc()失败是返回NULL指针,new失败是抛出异常 malloc和new的空间释放的方式不能串着用 new数组时需要注意配合del ...

  5. poj 2229 Sumsets(记录结果再利用的DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 将一个数N分解为2的幂之和共有几种分法? 题解: 定义dp[ i ]为数 i 的 ...

  6. node(基础三)_模块系统基础

      一.前言                                                                                         这篇文章主 ...

  7. php将用户信息提交到表单并且以txt文档打印出来

    1.分析: ====不推荐这种======== <?php function foo(){ // global $message; if(empty($_POST['username'])){ ...

  8. 关键字(4):grant授权/revoke回收权限

    单表授权 grant select , insert, update, delete on 表名 to 被授权用户名; grant select , insert, update, delete, r ...

  9. mysql数据库连接useSSL=true

    web应用中连接mysql数据库时控制台会出现这样的提示: Establishing SSL connection without server's identity verification is ...

  10. maven编译或者打包web项目显示“软件包 javax.servlet.http 不存在"

    2.解决办法: 这是由于缺少servlet-api.jar包,其实tomcat下有,但是在java build path把他加载过来,还是报这个错误,所以我们直接在pom.xml里面加入这个jar包即 ...