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.
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com