今日は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 )
?>
$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
$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));
$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”}”
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”;
$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 = array(
‘key1’ => ‘hoge_1’,
‘key2’ => ‘hoge_2’,
‘key3’ => ‘hoge_3’
);
var_export($array);
結果:
array (
‘key1’ => ‘hoge_1’,
‘key2’ => ‘hoge_2’,
‘key3’ => ‘hoge_3’,
)
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”;
}
$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 )
$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をまるごとマスター