首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

unserialize

(PHP 4, PHP 5, PHP 7)

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

描述

代码语言:javascript
复制
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()示例

代码语言:javascript
复制
<?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示例

代码语言:javascript
复制
<?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 →

代码语言:txt
复制
 © 1997–2017 The PHP Documentation Group

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

扫码关注腾讯云开发者

领取腾讯云代金券