Php 简明教程

PHP – Filtered unserialize()

在 PHP 中,内置函数 unserialize() 可从 PHP 版本 4 开始使用。在 PHP 7 中,添加了一个传递允许类列表的条款。这允许过滤不受信任的源。unserialze() 函数仅反序列化来自可信类的 data。

在 PHP 中,序列化表示生成值的存储表示。这对于存储或传递 PHP 值非常有用,而不会丢失它们的类型和结构。内置 serialize() 函数用于此目的。

serialize(mixed $value): string

unserialize() 函数从序列化的表示中给出一个 PHP 值。从 PHP 7 开始,unserialize() 函数遵循以下格式 -

unserialize(string $data, array $options = [ ]): mixed

$data 参数是你想要反序列化的序列化字符串。

$options 参数已新引入。它是一个关联数组,具有以下键 -

Sr.No

Name & Description

1

allowed_classes 应该接受的类名的数组,或 false 不接受任何类,或 true 接受所有类。省略此选项与将其定义为 true 相同。

2

max_depth 反序列化过程中允许的结构的最大深度。

Example

请看以下示例:

<?php
   class MyClass {
      var int $x;
      function __construct(int $x) {
         $this->x = $x;
      }
   }
   class NewClass {
      var int $y;
      function __construct(int $y) {
         $this->y = $y;
      }
   }

   $obj1 = new MyClass(10);
   $obj2 = new NewClass(20);

   $sob1 = serialize($obj1);
   $sob2 = serialize($obj2);

   // default behaviour that accepts all classes
   // second argument can be ommited.
   // if allowed_classes is passed as false, unserialize converts all objects into __PHP_Incomplete_Class object
   $usob1 = unserialize($sob1 , ["allowed_classes" => true]);

   // converts all objects into __PHP_Incomplete_Class object except those of MyClass and NewClass
   $usob2 = unserialize($sob2 , ["allowed_classes" => ["MyClass", "NewClass"]]);

   echo $usob1->x . PHP_EOL;
   echo $usob2->y . PHP_EOL;
?>

它将生成以下 output

10
20