岳琴濱
序列化是將變量轉(zhuǎn)換為可保存或傳輸?shù)淖址倪^(guò)程;反序列化就是在適當(dāng)?shù)臅r(shí)候把這個(gè)字符串再轉(zhuǎn)化成原來(lái)的變量使用。這兩個(gè)過(guò)程結(jié)合起來(lái),可以輕松地存儲(chǔ)和傳輸數(shù)據(jù),使程序更具維護(hù)性。 PHP中的序列化和反序列化分別通過(guò)函數(shù)serialize()和unserialize()即可實(shí)現(xiàn)。serialize()的參數(shù)可以是resource類型外的所有變量類型,最常見的是用來(lái)序列化對(duì)象,unseialize()將serialize的返回結(jié)果作為參數(shù),進(jìn)行反序列化,得到原對(duì)象。
郗慮
你想如果想把一個(gè)數(shù)組或者是對(duì)象存儲(chǔ)到文件或數(shù)據(jù)庫(kù)中,怎么辦。不能像字符串那樣的存儲(chǔ)吧。所以在存儲(chǔ)數(shù)組或?qū)ο笾跋萻erialize,在取回內(nèi)容時(shí)再unserialize...一句話:serialize的作用是 產(chǎn)生一個(gè)可存儲(chǔ)的值的表示.unserialize的作用是 對(duì)單一的已序列化的變量進(jìn)行操作,將其轉(zhuǎn)換回 PHP 的值。問(wèn)題可以去php中文網(wǎng)問(wèn)答社區(qū)提問(wèn)http://www.php.cn/wenda.html,大神在線幫你解決,希望對(duì)你有幫助
郁芳蘅
序列化的數(shù)據(jù)你用作查詢條件也沒法查啊。都是一堆字符串。
兩個(gè)答案 相反的啊 不過(guò)問(wèn)題已解決 謝謝
直上蒼穹
實(shí)在需要序列化,可以用反射(Reflection),并直接操作代碼文件獲得上下文信息:/*** 創(chuàng)建一個(gè)反射:*/$reflection = new ReflectionFunction($closure);/*** 參數(shù)可以直接得到了:*/$params = $reflection-getParameters();/*** 獲得Closure的函數(shù)體和use變量,形如:* function($arg1, $arg2, ...) use ($val1, $val2, ...) {* // 要獲得這個(gè)部分的代碼!* }* 辦法很多,你可以直接用正則、字符串查找或者Tokenizer,等等等等。* 比如可以先從reflection里得到函數(shù)的開始行和結(jié)束行:*/$startLine = $reflection-getStartLine();$endLine = $reflection-getEndLine();// 然后用str*這個(gè),str*那個(gè)的函數(shù)來(lái)清理,細(xì)節(jié)不寫了:
深宵煮酒
序列化是將變量轉(zhuǎn)換為可保存或傳輸?shù)淖址倪^(guò)程;反序列化就是在適當(dāng)?shù)臅r(shí)候把這個(gè)字符串再轉(zhuǎn)化成原來(lái)的變量使用。這兩個(gè)過(guò)程結(jié)合起來(lái),可以輕松地存儲(chǔ)和傳輸數(shù)據(jù),使程序更具維護(hù)性。PHP中的序列化和反序列化分別通過(guò)函數(shù)serialize()和unserialize()即可實(shí)現(xiàn)。serialize()的參數(shù)可以是resource類型外的所有變量類型,最常見的是用來(lái)序列化對(duì)象,unseialize()將serialize的返回結(jié)果作為參數(shù),進(jìn)行反序列化,得到原對(duì)象。在PHP中,序列化和反序列化很多地方都可以用到!~例如:數(shù)據(jù)庫(kù)連接,序列化數(shù)組等等。本回答被網(wǎng)友采納
季墅
你希望怎么傳,怎么用?你說(shuō)的直接傳是什么意思?這個(gè)跟語(yǔ)言其實(shí)沒什么關(guān)系。序列化之后的串可以是文本的也可以是二進(jìn)制,你把它傳遞給另一個(gè)程序,那個(gè)程序要怎么用才是關(guān)鍵。如果你希望解析這個(gè)串,那就要目標(biāo)程序有解析這個(gè)串的功能。具體到php,如果你使用php原生的序列化,那么就是得到一個(gè)字符串,這個(gè)字符串傳給一個(gè)C程序很容易,C程序解析這個(gè)串也不難,關(guān)鍵是你希望C程序中怎么用這個(gè)串?
無(wú)發(fā)仙
1.構(gòu)造HITCON類反序列化字符串,其中$method='login',$args數(shù)組’username’部分可用于構(gòu)造SQL語(yǔ)句,進(jìn)行SQL注入,'password’部分任意設(shè)置。
2.調(diào)用login()函數(shù)后,利用username構(gòu)造聯(lián)合查詢,使查詢結(jié)果為SoFun類反序列化字符串,設(shè)置username構(gòu)造聯(lián)合查詢,使查詢結(jié)果為SoFun類反序列化字符串,設(shè)置username構(gòu)造聯(lián)合查詢,使查詢結(jié)果為SoFun類反序列化字符串,設(shè)置file=‘flag.php’,需繞過(guò)__wakeup()函數(shù)。
3.繞過(guò)oadData()函數(shù)對(duì)反序列化字符串的驗(yàn)證。
4.SoFun類 __destruct()函數(shù)調(diào)用后,包含flag.php文件,獲取flag,需繞過(guò)__wakeup()函數(shù)。
本回答被網(wǎng)友采納
神圣世家
加@ 可以禁止提示錯(cuò)誤 ,但程序會(huì)正常運(yùn)行如下if(false !== @unserialize($arr)){
那樣會(huì)不會(huì)有潛在的危險(xiǎn)呢?
不會(huì)的啊, Notice 錯(cuò)誤都可以 忽略掉的。 這只不過(guò)是一種提示而已 不會(huì)影響程序。你也可以在 公共導(dǎo)入文件最上面里 加上一句error_reporting(E_ALL ^ E_NOTICE);這個(gè)就是 屏蔽notice錯(cuò)誤 而其他錯(cuò)誤是 全開 的意思。大型開源項(xiàng)目里 一般 常見的 代碼。
夢(mèng)季
<?php$stooges = array('Moe','Larry','Curly');$new = serialize($stooges);print_r($new);echo "<br />";print_r(unserialize($new));?>serialize() 把變量和它們的值編碼成文本形式
unserialize() 恢復(fù)原先變量