変数操作 関数
PHP Manual

unserialize

(PHP 4, PHP 5, PHP 7)

unserialize 保存用表現から PHP の値を生成する

説明

mixed unserialize ( string $str [, array $options ] )

unserialize() は、シリアル化された変数を PHP 変数値に戻す変換を行います。

警告

ユーザーからの入力をそのまま unserialize() に渡してはいけません。 アンシリアライズの時には、オブジェクトのインスタンス生成やオートローディングなどで コードが実行されることがあり、悪意のあるユーザーがこれを悪用するかもしれないからです。 シリアル化したデータをユーザーに渡す必要がある場合は、安全で標準的なデータ交換フォーマットである JSON などを使うようにしましょう。 json_decode() および json_encode() を利用します。

外部に保存されているシリアル化されたデータをアンシリアライズする必要がある場合は、 hash_hmac() を使ったデータの検証を検討しましょう。 他者によるデータの改ざんがないことを確かめるためです。

パラメータ

str

シリアル化された文字列。

もしアンシリアライズする変数がオブジェクトの場合、 オブジェクトが無事再作成された後、PHP は自動的にメンバ関数 __wakeup() (存在していれば) をコールしようとします。

注意: unserialize_callback_func ディレクティブ

コールバック関数を設定することが可能です。(不完全な object "__PHP_Incomplete_Class"を得ることを防ぐため) コールバック関数は、非シリアル化する際に未定義のクラスをインスタ ンス化する必要がある場合にコールされます。 'unserialize_callback_func'を定義するためには、 php.ini, ini_set(), .htaccess を使用し てください。未定義のクラスをインスタンス化する度に、コールバック関 数がコールされます。この機能を無効とするには、 単純にこの設定を空にしてください。

options

unserialize() に連想配列で渡すオプション。

有効なオプション
名前 説明
allowed_classes mixed 受け付けるクラス名の配列を指定します。あらゆるクラスを拒否する場合は FALSE、あらゆるクラスを受け付ける場合は TRUE を指定します。 このオプションを指定しているときに、もし unserialize() が受け付け対象外のクラスのオブジェクトに遭遇すると、 そのオブジェクトを __PHP_Incomplete_Class のインスタンスに変換します。 このオプションを省略すると、TRUE を指定したのと同じ意味になります。 つまり、PHP はあらゆるクラスのオブジェクトをインスタンス化しようとします。

返り値

変換された値が返されます。その値は、 boolean, integer, float, string, array, object のいずれかとなります。

渡された文字列が復元できなかった場合、FALSE を返して E_NOTICE を発生します。

変更履歴

バージョン 説明
7.0.0 options パラメータが追加されました。
5.6.0 シリアライズされたデータを改変して C:O: に置き換え、オブジェクトのインスタンス化の際にコンストラクタを呼ばないようにしたものは、 処理に失敗するようになりました。

例1 unserialize() の例

<?php
// ここで、データベースから $session_data にセッションデータをロード
// するために unserialize() を使用します。
// この例は、serialize() で記述された例を補足するものです。

$conn odbc_connect("webdb""php""chicken");
$stmt odbc_prepare($conn"SELECT data FROM sessions WHERE id = ?");
$sqldata = array($_SERVER['PHP_AUTH_USER']);
if (!
odbc_execute($stmt$sqldata) || !odbc_fetch_into($stmt$tmp)) {
    
// 実行または取得が失敗した場合、空の配列で初期化します
    
$session_data = array();
} else {
    
// tmp[0] にシリアル化されたデータを保持している必要があります。
    
$session_data unserialize($tmp[0]);
    if (!
is_array($session_data)) {
        
// 何か問題があったため、空の配列で初期化します。
        
$session_data = array();
    }
}
?>

例2 unserialize_callback_func の例

<?php
$serialized_object
='O:1:"a":1:{s:5:"value";s:3:"100";}';

// unserialize_callback_func ディレクティブは PHP 4.2.0 以降で利用可能
ini_set('unserialize_callback_func''mycallback'); // 独自のコールバック関数を設定する

function mycallback($classname
{
    
// クラスが定義されているファイルをインクルードするだけです。
    // どのクラス定義が必要になるのかを $classname で判断します。
}
?>

注意

警告

エラーやシリアライズされた FALSE 値をアンシリアライズする場合、 FALSE が返されます。この特殊なケースは strserialize(false) で比較する、もしくは E_NOTICE をキャッチすることで区別することができます。

参考


変数操作 関数
PHP Manual