ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるシリアル化と逆シリアル化についての深い理解

PHPにおけるシリアル化と逆シリアル化についての深い理解

迷茫
迷茫オリジナル
2017-03-26 11:05:201405ブラウズ

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

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

unserialize() 元の変数を復元

<span style="color: #800080">$stooges = <span style="color: #0000ff"><a href="http://www.php.cn/wiki/1041.html" target="_blank">array</a>(&#39;Moe&#39;,&#39;Larry&#39;,&#39;Curly&#39;);<br/><span style="color: #800080">$<a href="http://www.php.cn/wiki/165.html" target="_blank">new</a> = <span style="color: #008080">serialize(<span style="color: #800080">$stooges);<br/><span style="color: #008080"><a href="http://www.php.cn/wiki/1362.html" target="_blank">print</a>_r(<span style="color: #800080">$new);<span style="color: #0000ff"><a href="http://www.php.cn/wiki/1343.html" target="_blank">echo</a> "<br />";<br/><span style="color: #008080">print_r(<span style="color: #008080">unserialize(<span style="color: #800080">$new));</span></span></span></span></span></span></span></span></span></span></span>

結果: 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 に入れてページ間で渡すときは、データの urlencode() を呼び出して、データ内の URL メタキャラクターが確実に処理されるようにする必要があります:

<span style="color: #800080">$shopping = <span style="color: #0000ff">array(&#39;Poppy seed bagel&#39; => 2,&#39;Plain Bagel&#39; =>1,&#39;Lox&#39; =>4);<br/><span style="color: #0000ff">echo &#39;<a href="next.php?cart=&#39;.<span style="color: #008080">urlencode(<span style="color: #008080">serialize(<span style="color: #800080">$shopping)).&#39;">next</a>&#39;;</span></span></span></span></span></span>

margic_quotes_gpc と magic_quotes_runtime の設定設定項目は、unserialize() に渡されるデータに影響します。

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

<span style="color: #800080">$new_cart = <span style="color: #008080">unserialize(<span style="color: #008080">stripslashes(<span style="color: #800080">$cart)); <span style="color: #008000">//<span style="color: #008000">如果magic_quotes_gpc开启<span style="color: #008000"><br/><span style="color: #800080">$new_cart = <span style="color: #008080">unserialize(<span style="color: #800080">$cart);</span></span></span></span></span></span></span></span></span></span>

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

//当对一个对象进行反序列化操作时,PHP会自动地调用其wakeUp()方法。这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如:数据库连接等。

以上がPHPにおけるシリアル化と逆シリアル化についての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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