首页
学习
活动
专区
工具
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.

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com