PHPのシリアライズについて関数のまとめ

php関数 PHP

今日はPHPでよく使う関数について、紹介します。

serializeとunserialize関数

以下のコードで使い方がわかりますね。

<?php
  $a = array(‘a’ => ‘Apple’ ,’b’ => ‘banana’ , ‘c’ => ‘Coconut’);
  //配列をシリアライズする
  $s = serialize($a);
  echo $s;
  //結果:a:3:{s:1:”a”;s:5:”Apple”;s:1:”b”;s:6:”banana”;s:1:”c”;s:7:”Coconut”;}
  echo ‘<br /><br />
  //シリアライズしたデータを取得する
  $o = unserialize($s);
  print_r($o);
  //結果: Array ( [a] => Apple [b] => banana => Coconut )
  ?>
※データの中に特殊な文字があれば、アンシリアライズできないケースがあるため、以下のように実装する方が良い。
$obj = array();
//serialize
$txt = base64_encode(gzcompress(serialize($obj)));
//unserialize
$original = unserialize(gzuncompress(base64_decode($txt)));

※serialize関数でシリアライズしたデータを外部に送信/保存し、それをunserialize関数で情報取得すると危険です。
アンシリアライズは複雑なメモリ操作が必要で、PHPに限らず、何度もメモリ破壊攻撃の脆弱性が見つかっています。このため、外部入力データのアンシリアライズは行うべきではありません。

json_encodeとjson_decode関数

json_encodeは配列やオブジェクトなどをjson形式にして返します。
json_decodeはjson文字列をデコードして返します。

json_encode関数

<?php
  $arr = array(
    ‘str_jp’ => ‘ラブライブ!’,
    ‘str_en’ => ‘lovelive!’,
    ‘tags’ => ‘<foo class=”maki”>’,
    ‘apos’ => “I’m Erichika!”,
    ‘and’ => ‘MYTH & ROID’
 );
var_dump(json_encode($arr));
結果:
string(138) “{“str_jp”:”\u30e9\u30d6\u30e9\u30a4\u30d6!”,”str_en”:”lovelive!”,”tags”:””,”apos”:”I’m Erichika!”,”and”:”MYTH & ROID”}”

json_decode関数

<?php
$json = ‘{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}’;
 
var_dump(json_decode($json));
echo “\n\n”;
 // 第2引数を指定しない場合(false)はobject、trueを指定した場合は配列で値が返ってきます。
var_dump(json_decode($json, true));
echo “\n\n”;

var_exportとeval関数

var_export関数 は、 渡された変数に関する構造化された情報を返します。
eval関数は、文字列をコードとして評価する。

var_export関数

<?php
$array = array(
    ‘key1’ => ‘hoge_1’,
    ‘key2’ => ‘hoge_2’,
    ‘key3’ => ‘hoge_3’
);
var_export($array);
結果:
array (
  ‘key1’ => ‘hoge_1’,
  ‘key2’ => ‘hoge_2’,
  ‘key3’ => ‘hoge_3’,
)

eval関数

< ?php
 $str = ” ‘ABC’ === ‘ABC’ “;
 $if  = “return (“.$str.”) ? true : false;”;
 if (eval($if)) {
     echo “true”;
 } else {
   echo “false”;
 }

wddx_serialize_valueとwddx deserialize関数

wddx_serialize_value関数は、指定した単一の値をもとにして WDDX パケットを作成します。
wddx deserialize関数は、WDDX packet をデシリアライズします。

<?php
$a = array(‘a’ => ‘Apple’ ,’b’ => ‘banana’ , ‘c’ => ‘Coconut’);
 
//配列からWDDX パケットを作成する
$s = wddx_serialize_value($a);
echo $s;
 
//結果:<wddxPacket version=’1.0′><header/><data><struct><var name=’a’><string>Apple</string></var><var name=’b’><string>banana</string></var><var name=’c’><string>Coconut</string></var></struct></data></wddxPacket>
 
echo ‘<br /><br />’;
 
//WDDX パケットから配列に変換する
$o = wddx_deserialize($s);
print_r($o);
//結果:Array ( [a] => Apple [b] => banana 1 => Coconut )

おすすめの本

これ1冊でゼロから学べる Webプログラミング超入門 ーHTML,CSS,JavaScript,PHPをまるごとマスター

 

コメント

タイトルとURLをコピーしました