龍巖易富通網(wǎng)絡(luò)科技有限公司

龍巖小程序開發(fā),龍巖分銷系統(tǒng)

php函數(shù)serialize()與unserialize()

2015.09.10 | 565閱讀 | 0條評論 | php

serialize()和unserialize()在php手冊上的解釋是: serialize?— Generates a storable representation of a value serialize?— 產(chǎn)生一個可存儲的值的表示 unserialize?— Creates a PHP value from a stored representation unserialize?— 從已存儲的表示中創(chuàng)建 PHP 的值 其實serialize()就是將PHP中的變量如對象(object),數(shù)組(array)等等的值序列化為字符串后存儲起來.序列化的字符串我們可以存儲在其他地方如數(shù)據(jù)庫、Session、Cookie等,序列化的操作并不會丟失這些值的類型和結(jié)構(gòu)。這樣這些變量的數(shù)據(jù)就可以在PHP頁面、甚至是不同PHP程序間傳遞了。 而unserialize()就是把序列化的字符串轉(zhuǎn)換回PHP的值。 這里再引用一段PHP手冊上的說明,看了上面的例子,應(yīng)該很容易明白下面這些話的意思了 想要將已序列化的字符串變回 PHP 的值,可使用?unserialize()。serialize()?可處理除了?resource?之外的任何類型。甚至可以?serialize()?那些包含了指向其自身引用的數(shù)組。你正?serialize()?的數(shù)組/對象中的引用也將被存儲。 當(dāng)序列化對象時,PHP 將試圖在序列動作之前調(diào)用該對象的成員函數(shù)?__sleep()。這樣就允許對象在被序列化之前做任何清除操作。類似的,當(dāng)使用?unserialize()?恢復(fù)對象時, 將調(diào)用?__wakeup()?成員函數(shù) unserialize()?對單一的已序列化的變量進(jìn)行操作,將其轉(zhuǎn)換回 PHP 的值。返回的是轉(zhuǎn)換之后的值,可為integer、float、string、array?或?object。如果傳遞的字符串不可解序列化,則返回?FALSE。 margic_quotes_gpc和magic_quotes_runtime配置項的設(shè)置會影響傳遞到unserialize()中的數(shù)據(jù)。

如果magic_quotes_gpc項是啟用的,那么在URL、POST變量以及cookies中傳遞的數(shù)據(jù)在反序列化之前必須用stripslashes()進(jìn)行處理:
[php] <pre>$shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4); echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'">next</a>';[/php]
margic_quotes_gpc和magic_quotes_runtime配置項的設(shè)置會影響傳遞到unserialize()中的數(shù)據(jù)。
如果magic_quotes_gpc項是啟用的,那么在URL、POST變量以及cookies中傳遞的數(shù)據(jù)在反序列化之前必須用stripslashes()進(jìn)行處理:
[php] <pre>$new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc開啟 $new_cart = unserialize($cart);[/php]

贊 (

發(fā)表評論