ホームページ > バックエンド開発 > PHPチュートリアル > あなたのための PHP シリアル化形式の構造_PHP チュートリアル

あなたのための PHP シリアル化形式の構造_PHP チュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-15 13:31:34
オリジナル
876 人が閲覧しました

初めての方へPHP (PHP 3.05 以降) は、オブジェクトを保存するための一連のシリアル化および逆シリアル化関数 (シリアル化、シリアル化解除) を提供します。しかし、PHPのマニュアルではこれら2つの関数の説明は使い方のみで、シリアライズされた結果の形式についての説明はありません。

したがって、PHP シリアル化形式を他の言語で実装するのはさらに面倒です。以前に他の言語で実装された PHP シリアル化プログラムをいくつか集めましたが、これらの実装は完全ではありません。より複雑なオブジェクトをシリアル化または逆シリアル化すると、エラーが発生します。

そこで、他の言語で実装された PHP シリアル化プログラムを作成する際に、より完全な参照ができるように、PHP シリアル化形式の詳細な説明に関するドキュメント (つまり、このドキュメント) を作成することにしました。

この記事に書かれた内容は、PHP ソースコードをテストして読み取るプログラムを作成して取得したものであるため、すべての内容が正しいことを 100% 保証することはできませんが、私が書いた内容が確実であることを保証するために最善を尽くします。正確性については、まだ不明な点があれば記事内で明記させていただきますので、皆様で補足・改善していただければ幸いです。

PHP シリアル化後のコンテンツは単純なテキスト形式ですが、大文字と小文字と空白 (スペース、復帰、改行など) が区別され、文字列はバイト (または 8 ビット文字) で計算されます。したがって、PHP によってシリアル化されたコンテンツはバイト ストリーム形式であると言ったほうが適切です。

したがって、他の言語で実装される場合、実装された言語の文字列がバイト ストレージ形式ではなく Unicode ストレージ形式である場合、シリアル化されたコンテンツは文字列として保存するのには適していませんが、バイト ストリームとして保存する必要があります。 . オブジェクトまたはバイト配列。それ以外の場合は、PHP とのデータ交換時にエラーが発生します。

PHP は、さまざまなタイプのデータをマークするためにさまざまな文字を使用します。Yahoo 開発 Web サイトが提供する記事「Using Serialized PHP with Yahoo! Web Services」では、すべての文字マークとその意味が説明されています。 double

i - 整数

o - 共通オブジェクト
r - 参照
s - 文字列
C - カスタムオブジェクト
O - クラス
N - null
R - ポインタ参照
U - Unicode 文字列

N は NULL を表し、 b、 d、i、s は 4 つのスカラー型を表します。 現在、他の言語で実装されている PHP シリアル化形式のプログラムは、基本的にこれらの型のシリアル化と逆シリアル化を実装していますが、一部の実装では s (文字列) の実装に問題があります。

a と O は最も一般的に使用される複合型です。他の言語のほとんどの実装では、a のシリアル化と逆シリアル化が適切に実装されています。ただし、O については、PHP4 でオブジェクトのシリアル化形式が実装されているだけで、それは提供されていません。 PHP 5 での拡張オブジェクトシリアル化形式のサポート。

はそれぞれオブジェクト参照とポインター参照を表します。これら 2 つのマークが付いたデータは、後で詳しく説明します。これら 2 つのマーカーは他の言語でも実装されていることが見つかりました。

C は PHP5 で導入されたもので、他の言語ではあまり使用されないため必要ありませんが、後で詳しく説明します。

U は PHP6 で導入され、Unicode でエンコードされた文字列を表します。 PHP6 は Unicode モードで文字列を保存する機能を提供するため、この PHP シリアル化形式の文字列形式を提供します。ただし、この型は PHP5 または PHP4 ではサポートされておらず、これら 2 つのバージョンが現在主流であるため、他の言語でこの型が実装される場合があります。シリアル化に使用することはお勧めできませんが、逆シリアル化プロセスは実装できます。その形式についても後ほど説明します。

最後に o がありますが、これは私がまだ理解していない唯一のデータ型インジケーターです。このフラグはオブジェクトをシリアル化するために PHP3 で導入されましたが、PHP4 では O に置き換えられました。 PHP3 のソースコードを見ると、o のシリアル化と逆シリアル化は配列 a と基本的に同じであることがわかります。ただし、PHP4、PHP5、PHP6のソースコードのPHPシリアル化形式の部分には見つかりませんが、これらのバージョンのデシリアライザのソースコードでは処理されるのですが、どうすればよいのかわかりません。まだやります。したがって、当面はこれ以上の説明は行いません。


http://www.bkjia.com/PHPjc/446212.html

www.bkjia.com

http://www.bkjia.com/PHPjc/446212.html技術記事 PHP を初めて使用する人 (PHP 3.05 以降) のために、オブジェクトを保存するためのシリアル化および逆シリアル化関数のセット (シリアル化、アンシリアル化) が提供されています。ただし、PHP マニュアルでは、これら 2 つの関数は...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート