ホームページ  >  記事  >  バックエンド開発  >  PHPのシリアル化とデシリアライズの詳しい説明

PHPのシリアル化とデシリアライズの詳しい説明

墨辰丷
墨辰丷オリジナル
2018-05-25 14:53:051246ブラウズ

この記事では、php のシリアル化と逆シリアル化に関する関連知識を紹介します。非常に優れた参照値があります。以下のエディターで見てみましょう

複雑なデータ型を文字列に圧縮します

serialize() 変数とその値をテキスト形式にエンコードします

unserialize()元の変数

例:

$stooges = array('Moe','Larry','Curly');
$new = serialize($stooges);
print_r($new);echo "<br />";
print_r(unserialize($new));

結果: a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i: 2;s :5:"Curly";}

Array ([0] => Moe [1] => Larry [2] => Curly )

これらのシリアル化されたデータをURLに入れるとき、ページ間を行き来するときに、このデータの URL メタ文字が確実に処理されるように、このデータに対して urlencode() を呼び出す必要があります。

$shopping = array(&#39;Poppy seed bagel&#39; => 2,&#39;Plain Bagel&#39; =>1,&#39;Lox&#39; =>4);
echo &#39;<a href="next.php?cart=&#39;.urlencode(serialize($shopping)).&#39;" rel="external nofollow" >next</a>&#39;;

margin_quotes_gpc および magic_quotes_runtime 構成項目の設定は、unserialize() データに渡される設定に影響します。

magic_quotes_gpc 項目が有効な場合、URL、POST 変数、および Cookie で渡されたデータは、逆シリアル化の前に、stripslashes() で処理する必要があります:

$new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启
$new_cart = unserialize($cart);

magic_quotes_runtime が有効な場合、逆シリアル化の前に、シリアル化されたデータを処理する必要があります。ファイルに書き込まれる前にaddslashes()で処理され、読み取られる前にstripslashes()で処理されます:

$fp = fopen(&#39;/tmp/cart&#39;,&#39;w&#39;);
fputs($fp,addslashes(serialize($a)));
fclose($fp);
//如果magic_quotes_runtime开启
$new_cat = unserialize(stripslashes(file_get_contents(&#39;/tmp/cart&#39;)));
//如果magic_quotes_runtime关闭
$new_cat = unserialize(file_get_contents(&#39;/tmp/cart&#39;));

magic_quotes_runtimeが有効になっているデータベースから シリアル化されたデータの読み取りもstripslashes()によって処理され、シリアル化されたデータが保存される必要がありますデータベースへのデータは、適切に保存できるように、addslashes() によって処理する必要があります。

mysql_query("insert into cart(id,data) values(1,&#39;".addslashes(serialize($cart))."&#39;)");
$rs = mysql_query(&#39;select data from cart where id=1&#39;);
$ob = mysql_fetch_object($rs);
//如果magic_quotes_runtime开启
$new_cart = unserialize(stripslashes($ob->data));
//如果magic_quotes_runtime关闭
$new_cart = unserialize($ob->data);

オブジェクトを逆シリアル化するとき、PHP は自動的に __wakeUp() メソッドを呼び出します。これにより、オブジェクトはシリアル化中に保存されなかったさまざまな状態を再確立できるようになります。例: データベース接続など。

以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。


関連する推奨事項:

PHP シリアル化と逆シリアル化画像とテキストによる機能の詳細な説明

PHPはさまざまなシリアル化/アンチシリアル化メソッドを実装しています

フォームフォーム連載詳しい解説(画像とテキストのチュートリアル)

以上がPHPのシリアル化とデシリアライズの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。