首页  >  文章  >  后端开发  >  PHP 反初始化

PHP 反初始化

WBOY
WBOY原创
2024-08-29 12:51:251068浏览

PHP反序列化是可用于将序列化数据转换为实际用户输入数据的函数之一;它是序列化函数的相反过程,主要关注数组、映射集合,它将计算每个元素的数组索引、大尺寸或其他一些复杂的数据结构,我们使用一些默认方法来操作数据,还有 unserialize()如果用户输入不可反序列化,方法将返回布尔值,因此在输出控制台上返回 false,该对象是为反序列化函数单独创建的。

广告 该类别中的热门课程 PHP 开发人员 - 专业化 | 8 门课程系列 | 3次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

语法:

PHP 有自己的变量、关键字和函数语法,用于创建更复杂的基于 Web 的应用程序。一般来说,PHP 序列化格式没有像serialize() 函数那样有很好的文档记录;它支持序列化整数、浮点数、布尔值、字符串、数组。对象及其包括在反序列化实现中支持的其他参考。

<?php
$input= array('','');
$var = serialize($input);
$var1 = unserialize($var);
---some php codes based on the user needs---
?>

以上代码是在PHP中使用serialize()和unserialize()函数的基本语法。它支持所有数据类型和其他默认功能。

PHP 中的反序列化函数如何工作?

反序列化函数依赖于序列化函数;无论该函数调用和使用什么数据,它都将用键完全序列化。如果我们想要访问数据,我们需要在代码中反序列化数据或者反序列化数据。然后只有我们访问了数据;它也用于文件概念。使用这些serialize和unserialize()函数总是返回布尔条件,这将是对反序列化对象的安全和更多保护,或者我们可以将其称为不受信任的数据。这样就可以避免来自机器外部的一些其他恶意软件、病毒。它还通过代码注入进行保护,甚至数据库端都可以避免一些针对不受信任的恶意软件站点的 SQL 注入攻击。

一般来说,unserialize()函数有两个参数,str和options; str 是它包含等待反序列化的序列化字符串的参数之一,而 options 是它包含的数组之一,用于控制它仅接受有效用户的某些函数行为,特别是像 allowed_classes 这样的内置类。它仅接受指定的类名,特别是一些方法,如 _wakeup() 和 _destruct();这些方法是通过使用序列化对象来实现的;当我们使用此方法时,它会在特定对象上调用 unserialize() 函数时自动执行。

PHP 反序列化示例

下面给出的是 PHP 反序列化的示例:

示例#1

代码:

<?php
$inputs = serialize(array('Siva', 'Raman', 'Sivaraman', 'wdigb', 'dwiugv', '87dhg', 'wdhgv', 'edhgfv', 'hfe', 'wgieufv', 'ehoije', 'iwuoegf', 'wuieguv','jdgv', 'wqgdjf', 'khwdjgh','jdhfdkswi', 'uqiwuke', 'iqweyf', 'oiuqiwleyugu' ));
echo  $inputs . '<br>';
$vars = unserialize($inputs);
var_dump ($vars);
echo $vars;
?>

输出:

PHP 反初始化

在上面的示例中,我们在相同的代码中使用了serialize和unserialize()函数。每当用户向应用程序提供输入时,它都会将其存储在一个单独的变量中,并且它是序列化的变量,并且也会使用 echo 语句在控制台上打印。我们希望使用 unserialize() 函数对数据进行反序列化,并将其存储在单独的变量中,并且使用相同的 echo 语句将其打印出来。如果我们想在控制台上打印结果,我们将使用其他默认方法,如 print、echo 等。这些是 PHP 脚本上使用的一些方法。

示例#2

代码:

<?php
class demo {
public $vars;
}
class demo1 {
public $vars1;
}
class demo2 extends demo {
public $vars2, $vars3;
}
class demo3 extends demo2{
public $vars4;
}
class demo4 extends demo3 {
public $vars5;
}
class demo5 extends demo4 {
public $vars6;
}
class demo6 extends demo5{
public $vars7;
}
class demo7 extends demo6 {
public $vars8,$vars9, $vars10;
}
$c1 = new demo();
$c1->vars = 1234;
$c3 = new demo2();
$c3->vars2 = "Siva";
$c2 = new demo1();
$c2->vars1 = 2756876;
$d1 = serialize($c1);
$d2 = serialize($c2);
$d5 = serialize($c3);
$d3 = unserialize($d1, ["allowed_classes" => true]);
$d6 = unserialize($d5, ["allowed_classes" => true]);
$d4 = unserialize($d2, ["allowed_classes" => ["demo", "demo1"]]);
$d7 = unserialize($d5, ["allowed_classes" => ["demo", "demo1", "demo2"]]);
echo "Welcome To My Domain is: " . $d3->vars, $d6 ->vars2;
echo "<br />";
echo "Result of demo1 d3 memeber is: " . $d4->vars1;
echo "<br/>";
echo "Result of demo2 d7 memeber is: " . $d7->vars2;
?>

输出:

PHP 反初始化

在第二个示例中,我们使用了相同的序列化和反序列化概念。不过,这里我们还是使用了一些类。此外,每个类的父子关系都有自己单独的变量,这些变量带有公共访问修饰符,以便在类外部使用相同的变量;通过使用这样的对象,我们可以初始化单独变量的值。他们将序列化并将其存储在一个单独的变量中;之后,我们可以反序列化变量值并将它们单独存储。我们可以添加 n 个具有单独值的变量来序列化和反序列化数据。我们使用 allowed_classes 来验证代码中的序列化数据。

示例 #3

代码:

<?php
class demo
{
public $vars;
}
$vars1= new demo();
$vars1->vars= "siva";
$vars2= serialize($vars1);
echo "Welcome To My Domain<br> '$vars2'";
echo "<br><br>";
$vars3= unserialize($vars2);
echo "Have a Nice Day <br>";
echo  var_dump($vars3);
echo "<br> <br>";
echo "Thank you users your net result is shown" . $vars3->vars;
?>

输出:

PHP 反初始化

在最后一个示例中,我们使用了序列化和反序列化函数,因为我们使用键值对来反序列化 PHP 中的数组和对象。我们使用了一个值为“Siva”的变量,它将是一个纯文本字符串,然后转换回序列化和反序列化值的对象。

结论

在 PHP 中,我们使用默认函数、变量和关键字来创建用户友好的 Web 应用程序。就像它可以使用一些默认的类和方法在基于 Web 的应用程序中创建一些高级技术一样,这样我们就可以使用一些技术,如 serialize() 和 unserialize() 来更安全地存储和检索数据。

以上是PHP 反初始化的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:PHP Serialize下一篇:PHP strlen()