在线文档教程

unserialize

unserialize

(PHP 4, PHP 5, PHP 7)

unserialize - 从存储的表示形式创建PHP值

描述

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

unserialize()接受一个序列化变量并将其转换回PHP值。

Warning

无论allowed_classes的值如何,都不要将不受信任的用户输入传递给unserialize()。由于对象实例化和自动加载,反序列化可能导致代码被加载和执行,恶意用户可能能够利用它。如果需要将序列化数据传递给用户,请使用安全的标准数据交换格式,如JSON(通过json_decode()和json_encode())。options

如果需要反序列化外部存储的序列化数据,请考虑使用hash_hmac()进行数据验证。确保除了您之外的任何人都不会修改数据。

Parameters

str

序列化字符串。

如果被反序列化的变量是一个对象,在成功重建对象之后,PHP将自动尝试调用__wakeup()成员函数(如果存在)。

注意unserialize_callback_func指令 如果在反序列化期间应该实例化未定义的类,则可以设置将被调用的回调函数。(以防止获取不完整的对象“__PHP_Incomplete_Class”。)使用您的php.ini,ini_set()或.htaccess来定义' unserialize_callback_func '。每次都应该实例化一个未定义的类,它将被调用。要禁用此功能,请清空此设置。

options

作为关联数组提供给unserialize()的任何选项。

Name类型描述
allowed_classes要么接受的类名数组,要么不接受类的FALSE,要么接受所有类的TRUE。如果定义了此选项并且unserialize()遇到了不被接受的类的对象,则该对象将被实例化为__PHP_Incomplete_Class。省略此选项与将其定义为TRUE相同:PHP将尝试实例化任何类的对象。

返回值

返回转换后的值,可以是布尔值,整数,浮点数,字符串,数组或对象。

如果传递的字符串不可反序列化,FALSE则返回并E_NOTICE发出。

Changelog

描述
7.1.0现在,options()的allowed_classes元素是严格类型的,即如果给出除数组或布尔值以外的任何内容,则unserialize()返回FALSE并发出E_WARNING。
7.0.0选项参数已添加。
5.6.0通过将O:替换为C:来强制对象实例化而不调用构造函数来操作序列化数据现在将失败。

例子

示例#1 unserialize()示例

<?php // Here, we use unserialize() to load session data to the // $session_data array from the string selected from a database. // This example complements the one described with 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)) {     // if the execute or fetch fails, initialize to empty array     $session_data = array( } else {     // we should now have the serialized data in $tmp[0].     $session_data = unserialize($tmp[0]     if (!is_array($session_data)) {         // something went wrong, initialize to empty array         $session_data = array(     } } ?>

示例#2 unserialize_callback_func示例

<?php $serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}'; ini_set('unserialize_callback_func', 'mycallback' // set your callback_function function mycallback($classname)  {     // just include a file containing your classdefinition     // you get $classname to figure out which classdefinition is required } ?>

Notes

Warning

FALSE如果出现错误并且反序列化序列化FALSE值,则返回。它可以通过比较来抓住这个特殊的情况下str序列化(假)或通过捕捉发出E_NOTICE

See Also

  • json_encode() - 返回值的JSON表示形式

  • json_decode() - 解码JSON字符串

  • hash_hmac() - 使用HMAC方法生成键控哈希值

  • serialize() - 生成值的可存储表示

  • Autoloading Classes

  • __wakeup()

← strval

unset →

© 1997–2017 The PHP Documentation Group

Licensed under the Creative Commons Attribution License v3.0 or later.

https://secure.php.net/manual/en/function.unserialize.php