シリアル化されたphp文字列の詳細が文書化されているリソースを誰かが教えてくれるかどうか疑問に思っていました. 基本的にフォーマット/構造を知りたいので、VB.NETで関数を記述してシリアル化/逆シリアル化できます。
ありがとう!
シリアル化されたphp文字列の詳細が文書化されているリソースを誰かが教えてくれるかどうか疑問に思っていました. 基本的にフォーマット/構造を知りたいので、VB.NETで関数を記述してシリアル化/逆シリアル化できます。
ありがとう!
基本的な構造は次のとおりです。
スカラー型:
ブール値は次のようにシリアル化されます。
b:<i>;
ここで、 (false) または(true)<i>
のいずれかの値を持つ整数です。0
1
整数は次のようにシリアル化されます。
i:<i>;
は<i>
整数値です。
float は ( d
double を意味する) 次のようにシリアル化されます。
d:<f>;
は<f>
float 値です。
文字列は次のようにシリアル化されます。
s:<i>:"<s>";
ここ<i>
で、 は の文字列の長さを表す整数で<s>
、<s>
は文字列値です。
特別なタイプ:
null
次のように単純にシリアル化されます。
N;
複合タイプ:
配列は次のようにシリアル化されます。
a:<i>:{<elements>}
ここ<i>
で、 は配列内の要素数を表す整数で、<elements>
0 個以上のシリアル化されたキーと値のペアです。
<key><value>
ここで<key>
、シリアライズされたスカラー型と、シリアライズ<value>
可能な任意の値を表します。
オブジェクトは次のようにシリアル化されます。
O:<i>:"<s>":<i>:{<properties>}
ここで、最初の<i>
は の文字列の長さを表す整数で<s>
、<s>
は完全修飾クラス名です (完全な名前空間が前に付加されたクラス名)。2 番目<i>
は、オブジェクト プロパティの数を表す整数です。<properties>
ゼロ個以上のシリアル化された名前と値のペア:
<name><value>
ここ<name>
で、プロパティ名を表すシリアル化された文字列と、シリアル化<value>
可能な任意の値です。
ただし、キャッチが<name>
あります:
<name>
として表されます
s:<i>:"<s>";
の<i>
文字列の長さを表す整数です<s>
。ただし、の値は<s>
、プロパティの可視性によって異なります。
を。With public properties<s>
は、プロパティの単純な名前です。
b. ただし、保護されたプロパティでは、2つの文字で囲まれたアスタリスク(つまり)<s>
を前に付けた、プロパティの単純な名前です。\0*\0
NUL
chr(0)
c. また、プライベートプロパティの場合、<s>
はプロパティの単純な名前で、先頭に\0<s>\0
—が追加され、2文字で<s>
囲まれます。 は完全修飾クラス名です。NUL
<s>
参照を表すなど、他にもいくつかのケースがありますが、R:<i>;
ここでは言及していません (正直なところ、その正確な仕組みをまだ理解していないためです)。 .
phpinternalsbook でこのページが完全に完成していることがわかりました。また、インターフェイスを実装するクラスの代替シリアル化形式とSerializable
、形式指定子の意味も示しR
ます。