関数・クラス解説

unserialize

version:PHP 4, PHP 5, PHP 7 (公式)

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

公式リファレンス

書式

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

説明

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

警告

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

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

パラメータ

str
シリアル化された文字列。 もしアンシリアライズする変数がオブジェクトの場合、 オブジェクトが無事再作成された後、PHP は自動的にメンバ関数 __unserialize() または __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 はあらゆるクラスのオブジェクトをインスタンス化しようとします。

返値

変換された値が返されます。その値は、 bool, int, float, string, array, object のいずれかとなります。 渡された文字列が復元できなかった場合、FALSE を返して E_NOTICE を発生します。

注意

警告 エラーやシリアライズされた FALSE 値をアンシリアライズする場合、 FALSE が返されます。この特殊なケースは str を serialize(false) で比較する、もしくは E_NOTICE をキャッチすることで区別することができます。警告 allowed_classes の options の値にかかわらず、 ユーザーからの入力をそのまま unserialize() に渡してはいけません。 アンシリアライズの時には、オブジェクトのインスタンス生成やオートローディングなどで コードが実行されることがあり、悪意のあるユーザーがこれを悪用するかもしれないからです。 シリアル化したデータをユーザーに渡す必要がある場合は、安全で標準的なデータ交換フォーマットである JSON などを使うようにしましょう。 json_decode() および json_encode() を利用します。 外部に保存されているシリアル化されたデータをアンシリアライズする必要がある場合は、 hash_hmac() を使ったデータの検証を検討しましょう。 他者によるデータの改ざんがないことを確かめるためです。

更新履歴

バージョン 説明
7.1.0 options の allowed_classes 要素は、 型を厳密に調べるようになりました。 つまり、array または bool 以外の型が与えられると、 unserialize() 関数は FALSE を返し、 E_WARNING レベルの警告を発生させます。
7.0.0 options パラメータが追加されました。
5.6.0 シリアライズされたデータを改変して C: を O: に置き換え、オブジェクトのインスタンス化の際にコンストラクタを呼ばないようにしたものは、 処理に失敗するようになりました。

サンプル

例1 unserialize() の例

// ここで、データベースから $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 の例

$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}'; ini_set('unserialize_callback_func', 'mycallback'); // 独自のコールバック関数を設定する function mycallback($classname)  {     // クラスが定義されているファイルをインクルードするだけです。     // どのクラス定義が必要になるのかを $classname で判断します。 }

参考

  • json_encode() - 値を JSON 形式にして返す
  • json_decode() - JSON 文字列をデコードする
  • hash_hmac() - HMAC 方式を使用してハッシュ値を生成する
  • serialize() - 値の保存可能な表現を生成する
  • クラスのオートローディング
  • unserialize_callback_func
  • __wakeup()
  • __serialize()
  • __unserialize()
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール