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.