PHP 中 unserialize 函数是干什么用的?带你快速了解其基本用法
gitbox
2025-09-25
<?php
/**
* PHP 中 unserialize 函数是干什么用的?带你快速了解其基本用法
*
* 在 PHP 编程中,我们经常会遇到需要存储复杂数据结构(如数组、对象等)到文件或数据库的场景。
* 这时,PHP 提供了 serialize() 和 unserialize() 两个非常实用的函数。
*
* 一、unserialize 函数简介
*
* unserialize() 函数的作用是将通过 serialize() 序列化后的字符串重新转换成 PHP 的原始数据类型。
* 简单来说,它是 serialize() 的“逆操作”。
*
* 函数原型:
* mixed unserialize ( string $str [, array $options = [] ] )
*
* 参数说明:
* 1. $str:必需,要反序列化的字符串。
* 2. $options:可选,目前主要用于允许反序列化的类列表,增强安全性。
*
* 返回值:
* 成功返回序列化前的数据类型(数组、对象、字符串等),失败返回 FALSE。
*
* 二、基本用法示例
*/
// 示例1:反序列化数组
$serializedArray = 'a:3:{i:0;s:4:"PHP!";i:1;s:3:"123";i:2;s:6:"hello!";}';
$array = unserialize($serializedArray);
echo ""</span></span><span>;
</span><span><span class="function_ invoke__">print_r</span></span><span>(</span><span><span>$array</span></span><span>);
</span><span><span>echo</span></span><span> </span><span><span>"
";
// 输出结果:
// Array
// (
// [0] => PHP!
// [1] => 123
// [2] => hello!
// )
// 示例2:反序列化对象
class User {
public $name;
public $age;
}
$serializedObject = 'O:4:"User":2:{s:4:"name";s:4:"John";s:3:"age";i:25;}';
$user = unserialize($serializedObject);
echo ""</span></span><span>;
</span><span><span class="function_ invoke__">print_r</span></span><span>(</span><span><span>$user</span></span><span>);
</span><span><span>echo</span></span><span> </span><span><span>"
";
// 输出结果:
// User Object
// (
// [name] => John
// [age] => 25
// )
/**
* 三、unserialize 的安全注意事项
*
* unserialize 在处理来自不可信来源的数据时非常危险,因为它可能触发对象注入攻击。
* 攻击者可以通过精心构造的序列化字符串执行任意代码。
*
* 安全建议:
* 1. 尽量避免反序列化用户提供的数据。
* 2. 使用 allowed_classes 参数限制可反序列化的对象类。
* 3. 对数据来源进行严格验证和过滤。
*
* 四、总结
*
* - unserialize() 用于将序列化字符串还原成原始 PHP 数据。
* - 与 serialize() 配合,可以方便地存储和传输复杂数据。
* - 使用时务必注意安全问题,尤其是在处理外部数据时。
*
* 掌握了 unserialize(),你就能更灵活地在 PHP 中处理数据持久化和对象存储了。
*/
?>
<?php
// 文章后的无关PHP代码
$footer = "这里是文章后的尾部无关代码";
echo $footer;
?>