unserialize

関数の概要

PHPの unserialize 関数は、シリアライズされた文字列(保存や通信に適した形式に変換されたデータ)から元のPHPの値に復元するために使われます。つまり、一度 serialize 関数で文字列化した配列やオブジェクトなどのデータを元通りに戻す際に役立ちます。

パラメータの説明

  • string $data: 復元したいシリアライズされた文字列を指定します。
  • array $options(PHP 7.0以降、オプション): 復元時の挙動を制御する配列。例えば特定のクラスのみ許可するなどの制限が可能です。

戻り値

正常に復元できれば元のPHPの値(配列やオブジェクト、単純な値)が返されます。シリアライズ文字列が不正な場合や復元に失敗した場合は false を返します。

使用例

基本的な使い方

$serialized = 'a:3:{i:0;s:3:"foo";i:1;s:3:"bar";i:2;s:3:"baz";}';
$data = unserialize($serialized);
var_dump($data);

この例では、シリアライズされた配列を復元し、元の配列が得られます。

オブジェクトの復元

class Sample {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
}

$object = new Sample('test');
$serialized = serialize($object);
$restored = unserialize($serialized);
echo $restored->name; // "test"

オブジェクトもシリアライズ文字列から復元可能です。クラス定義が必要な点に注意しましょう。

許可するクラスを制限する例(PHP 7.0+)

class AllowedClass {}
class ForbiddenClass {}

$allowedObject = new AllowedClass();
$forbiddenObject = new ForbiddenClass();

$serialized = serialize($allowedObject);
$options = ['allowed_classes' => ['AllowedClass']];

$data = unserialize($serialized, $options);
var_dump($data); // AllowedClassのインスタンスが復元される

$serializedForbidden = serialize($forbiddenObject);
$dataForbidden = unserialize($serializedForbidden, $options);
var_dump($dataForbidden); // falseまたはNULL(復元が拒否される)

セキュリティ強化のために許可されたクラスのみを復元するように設定できます。

関連する関数

  • serialize – PHPの値をシリアライズされた文字列に変換する
  • json_encode – データをJSON形式文字列に変換
  • json_decode – JSON文字列をPHPの値に復元

まとめ

unserialize は、PHPで保存や通信に便利なシリアライズ文字列から元の値を復元できる重要な関数です。配列やオブジェクトだけでなく単純な値も復元できるため、データの持ち運びや永続化によく使われます。セキュリティ面では復元時に許可クラスを制限できるため、安全に利用するポイントも押さえておきましょう。