PHP取消序列化教程

604 阅读2分钟

PHP unserialize

PHP非序列化简介

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

语法。

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

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

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

unserialize函数在PHP中如何工作?

  • 非序列化函数依赖于序列化函数;无论在该函数上调用和使用什么数据,它都将被完全序列化,并带有键。如果我们想访问这些数据,我们要在代码中对这些数据进行反序列化或取消序列化。然后,只有我们访问数据;它也被用于文件的概念。使用这些序列化和反序列化()函数总是返回布尔条件,这将是安全的,并且对反序列化的对象有更多的保护,或者我们可以把它称为不可信任的数据。因此,它将避免一些其他的恶意软件和来自机器外部的病毒。它也能保证代码注入的安全,甚至数据库端也能避免一些不受信任的恶意软件网站的SQL注入攻击。
  • 一般来说,unserialize()函数需要两个参数,str和options;str是其中一个参数,它包含等待被反序列化的序列化字符串,options是其中一个数组,用于控制某些功能行为,它只接受有效的用户,特别是内置的类,如allowed_classes。它只接受指定的类名,特别是一些方法,如_wakeup()和_destruct();这些方法是通过使用序列化的对象来实现的;当我们使用这个方法时,它在特定对象上调用unserialize()函数时自动执行。

PHP unserialize的例子

下面给出的是PHP unserialize的例子。

例子 #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 unserailize 1

在上面的例子中,我们在同一代码中使用了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; ?>

输出。

we used additionally some classes

在第二个例子中,我们使用了同样的serialize和unserialize概念。不过,这里我们还是使用了一些类。此外,每个类的父子关系都有自己独立的变量,并带有公共访问修改器,以便在类之外利用相同的变量;通过这样的使用对象,我们可以初始化独立变量的值。它们将被序列化并存储在一个单独的变量上;之后,我们可以反序列化变量值并将其作为单独的变量存储。我们可以为序列化和反序列化的数据添加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 unserailize 3

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

总结

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