序列化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. TimerTask的run()方法里面如何调用service层里面的方法

    在java的spring框架中,用Timer和TimerTask来实现定时任务,有时我们要在TimerTask的子类的重写run方法里,调用service层的方法. 但是不管是spring.xml配置 ...

  2. JS原生 未来元素监听写法

    绑定事件的另一种方法是用 addEventListener() 或 attachEvent() 来绑定事件监听函数. addEventListener()函数语法:elementObject.addE ...

  3. 洛谷P4316 绿豆蛙的归宿

    一眼看去,这不是高斯消元吗? 然后发现数据范围是100000... 然后发现是DAG...直接拓扑序递推即可. 边(x, y,z)的贡献是P(x) * z / out[x] #include < ...

  4. pandas 连接数据库直接查表建立dataframe。loc,sort_values数据清洗操作

    #导入pandas import pandas as pd import numpy as np #导入SqlAlchemy from sqlalchemy import create_engine ...

  5. linux系统调用之进程控制

    1 进程控制: fork                                                                                     创建一 ...

  6. alias命令使用

    alias 别名 增加别名 alias vi=vim alias api='sudo apt-get install' alias apr='sudo apt-get remove' alias tz ...

  7. c#中数组的总结

    Array数组: 基本定义:string[] Scences={"sky","star","sun"}  或者 int[] Scences= ...

  8. Failed to start Vsftpd ftp daemon错误

    配置 vsftpd.conf文件后 重启ftp服务出现 Failed to start Vsftpd ftp daemon错误 总是 启动失败 解决方法 将配置文件中的 listen=YES 改为 l ...

  9. Ubuntu下载报错“文件尺寸不符”

    最近学习openfoam,安装双系统后,根据官网进行安装openfoam,在文件的下载中会出现: “文件尺寸不符” 这个错误是因为网络不好造成的,或是请求的网站无回应. 解决的办法手机打开4G,打开热 ...

  10. (贪心) nyoj1036-非洲小孩

    题目描述: 家住非洲的小孩,都很黑.为什么呢?第一,他们地处热带,太阳辐射严重.第二,他们不经常洗澡.(常年缺水,怎么洗澡.)现在,在一个非洲部落里,他们只有一个地方洗澡,并且,洗澡时间很短,瞬间有木 ...