この記事では、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('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4); echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'" rel="external nofollow" >next</a>';
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('/tmp/cart','w'); fputs($fp,addslashes(serialize($a))); fclose($fp); //如果magic_quotes_runtime开启 $new_cat = unserialize(stripslashes(file_get_contents('/tmp/cart'))); //如果magic_quotes_runtime关闭 $new_cat = unserialize(file_get_contents('/tmp/cart'));
magic_quotes_runtimeが有効になっているデータベースから シリアル化されたデータの読み取りもstripslashes()によって処理され、シリアル化されたデータが保存される必要がありますデータベースへのデータは、適切に保存できるように、addslashes() によって処理する必要があります。
mysql_query("insert into cart(id,data) values(1,'".addslashes(serialize($cart))."')"); $rs = mysql_query('select data from cart where id=1'); $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 中国語 Web サイト (www.php.cn) に注目してください。