成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為你剖解PHP序列化格式

開發 后端
PHP序列化格式包含序列化和反序列化函數,分別為serialize、unserialize。這一知識點在PHP語言中算是一個比較難理解的部分。

對于那些剛剛接觸PHP語言的朋友來說,什么是PHP序列化格式可能大家都還是不太清楚。我們今天就為大家詳細講解這一方面的知識。

#t#PHP (從 PHP 3.05 開始)為保存對象提供了一組序列化和反序列化的函數:serialize、unserialize。不過在 PHP 手冊中對這兩個函數的說明僅限于如何使用,而對序列化結果的格式卻沒做任何說明。

因此,這對在其他語言中實現PHP序列化格式來說,就比較麻煩了。雖然以前也搜集了一些其他語言實現的 PHP 序列化的程序,不過這些實現都不完全,當序列化或反序列化一些比較復雜的對象時,就會出錯了。

于是我決定寫一份關于PHP序列化格式詳解的文檔(也就是這一篇文檔),以便在編寫其他語言實現的 php 序列化程序時能有一個比較完整的參考。

這篇文章中所寫的內容是我通過編寫程序測試和閱讀 PHP 源代碼得到的,所以,我不能 100% 保證所有的內容都是正確的,不過我會盡量保證我所寫下的內容的正確性,對于我還不太清楚的地方,我會在文中明確指出,也希望大家能夠給予補充和完善。

PHP序列化格式后的內容是簡單的文本格式,但是對字母大小寫和空白(空格、回車、換行等)敏感,而且字符串是按照字節(或者說是 8 位的字符)計算的,因此,更合適的說法是 PHP 序列化后的內容是字節流格式。

因此用其他語言實現時,如果所實現的語言中的字符串不是字節儲存格式,而是 Unicode 儲存格式的話,序列化后的內容不適合保存為字符串,而應保存為字節流對象或者字節數組,否則在與 PHP 進行數據交換時會產生錯誤。

PHP 對不同類型的數據用不同的字母進行標示,Yahoo 開發網站提供的 Using Serialized PHP with Yahoo! Web Services 一文中給出所有的字母標示及其含義:

a - array
b - boolean
d - double
i - integer
o - common object
r - reference
s - string
C - custom object
O - class
N - null
R - pointer reference
U - unicode string

N 表示的是 NULL,而 b、d、i、s 表示的是四種標量類型,目前其它語言所實現的PHP序列化格式程序基本上都實現了對這些類型的序列化和反序列化,不過有一些實現中對 s (字符串)的實現存在問題。

a、O 屬于最常用的復合類型,大部分其他語言的實現都很好的實現了對 a 的序列化和反序列化,但對 O 只實現了 PHP4 中對象序列化格式,而沒有提供對 PHP 5 中擴展的對象序列化格式的支持。

r、R 分別表示對象引用和指針引用,這兩個也比較有用,在序列化比較復雜的數組和對象時就會產生帶有這兩個標示的數據,后面我們將詳細講解這兩個標示,目前這兩個標示尚沒有發現有其他語言的實現。

C 是 PHP5 中引入的,它表示自定義的對象序列化方式,盡管這對于其它語言來說是沒有必要實現的,因為很少會用到它,但是后面還是會對它進行詳細講解的。

U 是 PHP6 中才引入的,它表示 Unicode 編碼的字符串。因為 PHP6 中提供了 Unicode 方式保存字符串的能力,因此它提供了這種PHP序列化格式字符串的格式,不過這個類型 PHP5、PHP4 都不支持,而這兩個版本目前是主流,因此在其它語言實現該類型時,不推薦用它來進行序列化,不過可以實現它的反序列化過程。在后面我也會對它的格式進行說明。

***還有一個 o,這也是我唯一還沒弄清楚的一個數據類型標示。這個標示在 PHP3 中被引入用來序列化對象,但是到了 PHP4 以后就被 O 取代了。在 PHP3 的源代碼中可以看到對 o 的序列化和反序列化與數組 a 基本上是一樣的。但是在 PHP4、PHP5 和 PHP6 的源代碼中PHP序列化格式部分里都找不到它的影子,但是在這幾個版本的反序列化程序源代碼中卻都有對它的處理,不過把它處理成什么我還沒弄清楚。因此對它暫時不再作更多說明了。

責任編輯:曹凱 來源: 百度博客
相關推薦

2019-11-20 10:07:23

web安全PHP序列化反序列化

2009-12-09 09:38:15

PHP序列化數組

2022-08-06 08:41:18

序列化反序列化Hessian

2011-06-01 15:05:02

序列化反序列化

2009-08-24 17:14:08

C#序列化

2009-08-06 11:16:25

C#序列化和反序列化

2011-05-18 15:20:13

XML

2023-12-13 13:49:52

Python序列化模塊

2018-03-19 10:20:23

Java序列化反序列化

2024-01-06 10:01:53

數據序列化格式

2013-03-11 13:55:03

JavaJSON

2011-06-01 14:26:11

序列化

2024-10-07 08:26:53

2011-06-01 14:50:48

2009-06-14 22:01:27

Java對象序列化反序列化

2009-08-25 14:24:36

C#序列化和反序列化

2021-11-18 07:39:41

Json 序列化Vue

2019-08-12 06:41:26

PHP反序列化漏洞

2009-09-09 16:10:11

.NET序列化和反序列

2012-04-13 10:45:59

XML
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩免费福利视频 | 成人亚洲精品久久久久软件 | 久久精品国产v日韩v亚洲 | 黑人中文字幕一区二区三区 | 国产成人免费视频网站视频社区 | 九色av| 欧美一区二区三区视频 | 黄色大片免费看 | 国内久久精品 | 在线欧美一区 | 亚洲免费高清 | 欧美1区| 精品视频一区二区三区 | 久综合| 亚洲狠狠爱 | 成人免费视频在线观看 | 香蕉久久a毛片 | 涩涩操| 久久久久国产视频 | 成人一区二区视频 | 看一级黄色毛片 | 欧美日韩精品免费 | 性做久久久久久免费观看欧美 | 狼人伊人影院 | 久久精品小短片 | 久久影院一区 | 久久99精品国产 | 精品国产一区二区三区久久久久久 | 久久成人免费视频 | 精品在线免费观看视频 | 日韩欧美精品在线 | 伊人久操 | 国产精品久久久久久久久动漫 | 亚洲一区二区三区在线播放 | 亚洲国产精久久久久久久 | 国产一区二区电影 | 天天干天天干 | 美日韩免费视频 | 伊人久久大香线 | 国产乱码精品一区二区三区中文 | 在线观看国产网站 |