習慣性借用手冊裡面的介紹:
所有php裡面的值都可以使用函式serialize()來返回乙個包含位元組流的字串來表示。unserialize()函式能夠重新把字串變回php原來的值。序列化乙個物件將會儲存物件的所有變數,但是不會儲存物件的方法,只會儲存類的名字。
唔,不懂沒事,我們直接看**:
注釋有解釋=。=。。。
<?php
//首先宣告乙個陣列
$array_1 = array();
//隨後。。。原諒我這個博主比較懶,用最麻煩的方式建陣列
$array_1['value1'] = 'value_value';
$array_1['value2']='value_value';
$array_1['value3']='value_value';
$array_1['value4']='value_value';
$array_1['value5']='value_value';
$array_1['value6']='value_value';
$array_1['value7']='value_value';
//序列化陣列
$str_value = serialize($array_1);
//唔,輸出的時候發現這個陣列變成了字串
echo
$str_value;
//n個換行,博主比較懶不好意思...
echo'';
//為了嚴謹我就unset掉這個array了
unset($array_1);
//反序列化,用乙個變數接收值
$array_2=array();
$array_2 = unserialize($str_value);
//輸出,,,尼瑪,發現是不是又是陣列了?
print_r($array_2);
結果如下:
ok,那麼我們現在明白了我們的序列化和反序列化了吧?
手冊上手「返回乙個包含位元組流的字串來表示」,那我們序列化後是不是變成了字串了?然後我們反序列化後就又回到以前的樣子了。
序列化:serialize()
反序列化:unserialize()
注意php手冊還說過:「為了能夠unserialize()乙個物件,這個物件的類必須已經定義過。如果序列化類a的乙個物件,將會返回乙個跟類a相關,而且包含了物件所有變數值的字串。 如果要想在另外乙個檔案中解序列化乙個物件,這個物件的類必須在解序列化之前定義」
意思就是如果反序列化乙個物件,那麼這個物件必須在這個php檔案裡面,或者說已經引入到了這個檔案,而且要在反序列化之前定義。
PHP物件序列化和反序列化
序列化 final class db 填寫需要序列化的屬性,不寫此方法的話,序列化全部屬性 public function sleep private function connectdb arr db host localhost db user root db pass root obj new...
PHP序列化 序列化
將物件序列號 當需要將物件長久儲存時或用於網路傳輸等.將物件序列號成字串儲存 class demo 魔術方式,當物件序列號時自動呼叫,此時會序列號陣列中的屬性.如果沒有該方法,則序列號所有屬性 function sleep 當物件返序列化時自動呼叫,此時會初始化返序列化後物件中該方法中的屬性 fun...
php反序列化注入,php關於反序列化物件注入漏洞
php物件注入是乙個非常常見的漏洞,這個型別的漏洞雖然有些難以利用,但仍舊非常危險。本文主要和大家分享php關於反序列化物件注入漏洞詳解,希望能幫助到大家。分析php基礎 serialize 把乙個物件轉成字串形式,可以用於儲存 unserialize 把serialize序列化後的字串變成乙個物件...