1. 程式人生 > 實用技巧 >PHP 反序列化——入門

PHP 反序列化——入門

0x00 引言

什麼是反序列化

  1. 序列化
    • 類物件在儲存的過程中需要將物件的資訊轉換為可以傳輸的形式,故將物件進行序列化
    • 序列化的結果將以字串的形式儲存在臨時或永續性儲存區,以便對該物件的二次讀取
    • 用法:serialize()
  2. 反序列化
    • 在對類物件進行使用或者讀取時,從儲存區讀取該字串,對字串進行反序列化操作,重新建立該物件
    • 用法:unserialize()

類物件的序列化

<?php
	class student{
		public $name = 'xiaoming';
		public $age = 20;
		public $score = 60;
	}
	$a = new student();
	serialize($a);
//$a='O:7:"student":3:{s:4:"name";s:8:"xiaoming";s:3:"age";i:20;s:5:"score";i:60;}'
?>
  1. 定義類:

    • 使用class student定義一個名字為student的類
    • 這個類中一共有三個Public屬性
  2. 建立類物件

    • 使用new student(),建立一個student類物件,並將該物件賦給$a
  3. 對類物件進行序列化

    • 使用serialize($a)對類物件$a進行序列化,序列化結果為O:7:"student":3:{s:4:"name";s:8:"xiaoming";s:3:"age";i:20;s:5:"score";i:60;}
  4. 序列化結果分析

    ### O:7:"student":3:{s:4:"name";s:8:"xiaoming";s:3:"age";i:20;s:5:"score";i:60;} 
    1. O-Object-物件
    2. 7-len(ObjectName)-物件名稱長度
    3. student-ObjectName-物件名稱
    4. 3-count(variable)-屬性個數
    5. s-String-字串
    6. 4-len(String)-字串長度
    7. name-StringValue-字串值
    ### Less...