php反序列化是什么

  介绍

本篇内容介绍了“php反序列化是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

<强> 1,前言

最近也是在复习之前学过的内容,感觉对PHP反序列化的理解更加深了,所以在此总结一下

<强> 2,serialize()函数

,,,,“所有php里面的值都可以使用函数序列化()来返回一个包含字节流的字符串来表示。序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。”

一开始看这个概念可能有些懵,但之后也是慢慢理解了

在程序执行结束时,内存数据便会立即销毁,变量所储存的数据便是内存数据,而文件,数据库是“持久数据”,因此php序列化就是将内存的变量数据“保存”到文件中的持久数据的过程。

, s 美元;=,序列化($变量),,//该函数将变量数据进行序列化转换为字符串   写入的。/目标文本文件& # 39;,,$ s);,//将$ s保存到指定文件

下面通过一个具体的例子来了解一下序列化:

& lt; ? php   class 用户   {   public 才能;age 美元;=,0;   public 才能;name 美元;=,& # 39;& # 39;;      public 才能;function  PrintData ()   {才能   ,,,echo  & # 39; User  & # 39;。$ this→名称强生# 39;如果# 39;。$ this→年龄强生# 39;years 老只& lt; br /祝辞;& # 39;;   ,,}   }//创建一个对象   $ user =, new 用户();//,设置数据=$ user→age  20;=$ user→name  & # 39;大业# 39;;//输出数据   $用户→PrintData ();//输出序列化之后的数据   echo 序列化($ user);      ?在

这个是结果:

 php反序列化是什么

可以看到序列化一个对象后将会保存对象的所有变量,并且发现序列化后的结果都有一个字符,这些字符都是以下字母的缩写。

a 作用;array ,,,,,,,, b 作用;布尔   d 安康;double ,,,,,,,,小姐:安康;整数   o 安康;common  object ,,,, r 作用;参考   s 安康;string ,,,,,,,, C 作用;custom 对象   O 安康;class ,,,,,,,, N 作用;null   R 安康;pointer 参考文档,,U 作用;unicode 字符串

了解了缩写的类型字母,便可以得到PHP序列化格式

O: 4:“User": 2: {: 3:“age"我:20;s: 4:“name";销售:4:“daye";}   对象类型:长度:“类名”:类中变量的个数:{类型:长度:“值“;类型:长度:“值“;……}

通过以上例子,便可以理解了概念中的通过序列化()函数返回一个包含字节流的字符串这一段话。

<强> 3,unserialize()函数

<代码> unserialize() 对单一的已序列化的变量进行操作,将其转换回PHP的值。在解序列化一个对象前,这个对象的类必须在解序列化之前定义只

简单来理解起来就算将序列化过存储到文件中的数据,恢复到程序代码的变量表示形式的过程,恢复到变量序列化之前的结果。

, s 美元;=,file_get_contents(“。/目标文本文件& # 39;);,//取得文本文件的内容(之前序列化过的字符串)   美元,变量,=,unserialize ($ s);,//将该文本内容,反序列化到指定的变量中

通过一个例子来了解反序列化:

& lt; php ?   class 用户   {   public 才能;age 美元;=,0;   public 才能;name 美元;=,& # 39;& # 39;;      public 才能;function  PrintData ()   {才能   ,,,echo  & # 39; User  & # 39;。$ this→名称# 39;公司,is  & # 39;。$ this→年龄# 39;公司,years 老只& lt; br /祝辞;& # 39;;   ,,}   }//重建对象   $ user =, unserialize (& # 39; O: 4:“User": 2: {: 3:“age"我:20;销售:4:“name";销售:4:“daye";} & # 39;);      $用户→PrintData ();      ?在

这个是结果:

 php反序列化是什么

<强>注意:在解序列化一个对象前,这个对象的类必须在解序列化之前定义。否则会报错

<强> 4,PHP反序列化漏洞

在学习漏洞前,先来了解一下PHP魔法函数,对接下来的学习会很有帮助

php反序列化是什么