当前位置:首页 » 编程语言 » php反序列化数组

php反序列化数组

发布时间: 2022-06-08 18:16:59

1. php数据库数组反序列化取指定内容

$str='a:2:{i:0;b:0;s:8:"bankinfo";a:1:{i:1;a:2{s:6:"bankid";i:1;s:7:"cardnum";s:4:"adda";}}}';
$res=unserialize($str);
echo$res['bankinfo'][1]['cardnum'];

这个数组整个结构是

Array(
[0]=>false
[bankinfo]=>Array(
[1]=>Array(
[bankid]=>1
[cardnum]=>adda
)
)
)

2. php 什么是序列化

string serialize ( mixed value )

serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。

这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

注: 在 PHP 3 中,对象属性将被序列化,但是方法则会丢失。PHP 4 打破了此限制,可以同时存储属性和方法。请参见类与对象中的序列化对象部分获取更多信息。

例子 1. serialize() 示例

<?php
// $session_data 是包含了当前用户 session 信息的多维数组。
// 我们使用 serialize() 在请求结束之前将其存储到数据库中。

$conn = odbc_connect ("webdb", "php", "chicken");
$stmt = odbc_prepare ($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $PHP_AUTH_USER);
if (!odbc_execute ($stmt, &$sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, &$sqldata)) {
/* 出错 */
}
}
?>

3. PHP中unserialize() 反序列化之后得到的数组怎样获取里边的值

<?php

header("Content-type: text/html; charset=utf-8");

$s='a:5:{i:206;a:2:{s:4:"name";s:6:"款式";i:3056;s:9:"蝙蝠衫";}i:207;a:2:{s:4:"name";s:6:"材质";i:3059;s:3:"棉";}i:208;a:2:{s:4:"name";s:6:"价格";i:3068;s:4:"0-99";}i:209;a:2:{s:4:"name";s:6:"袖长";i:3076;s:6:"长袖";}i:210;a:2:{s:4:"name";s:6:"风格";i:3088;s:6:"百搭";}}';

//序列化后的数组

$unserarr=unserialize($s);

$result=array();

foreach($unserarr as $k=>$v){

while (list($key, $val) = each($v)){

$result[$k]=array(

'name'=>$v['name'],

'value'=>$val


);

}

}

var_mp($result);

?>

//运行结果如下

4. thinkphp 反序列化有什么用

  • ThinkPHP系统变量,常量,序列化,反序列化,缓存

变量的输出:

在模板中输出一个变量有两种形式:{$list.name} {$list[‘name’]}

在模板中可以使用系统变量,以$Think.开头

系统变量:(举例选几个)

获得服务器的IP地址:{$Think.server.SERVER_ADDR}

获得外部访问的IP地址:{$Think.server.REMOTE_ADDR}

获得服务器的名称:{$Think.server.SERVER_NAME}

获得ThinkPHP内部定义的变量:

获得当前的时间:{$Think.now}

获得当前工具的版本:{$Think.version}

模板的页面:{$Think.template}

模板标签起始符号:{$Think.LDELIM }

模板标签结束符号:{$Think.RDELIM }

系统常量:(举例选几个)

获得当前文件的url :{$Think.const.__SELF__}

获得模板配置文件的配置项的值:

{$Think.config.db_name}

在ThinkPHP模板中,对变量使用函数调节:

从控制器分配了一个字符串,在模板中,如何截取这个字符串:{$str|substr=###,5,3} 如果当前参数为函数的第一个参数,可以不写###

在模板中加载外部文件:

使用<include file=””> file( )和display( )的用法一样。

If标签的使用:<if condition=”条件1”>value1<elseifcondition=”条件2”>value2<else/>value3</if> condition里面写成比较运算符 eq表示等于 neq表示不等于

修改模板引擎的界定符:

在配置文件中,通过TMPL_L_DELIM修改

‘TMPL_L_DELIM’=>’<{’ //修改左定界符

‘TMPL_R_DELIM’=>’<{’ //修改右定界符

修改模板引擎:

'TMPL_ENGINE_TYPE'=>'Smarty'

在分组中添加配置文件,在控制器中使用直接调用C函数。

ThinkPHP的缓存机制:

数据缓存:就是讲数据库中获得的数据保存在一个介质上,需要时直接在这个介质上读取。

我们需要通过ThinkPHP中的cache类来实现,通过这个类的方法获得对象,在通过这个对象来实现不同介质的数据处理。

通过传递不同的参数获得不通过的数据处理对象。

$cache=Cache::getInstance(‘File’);

页面缓存:

1. 开启缓存

在配置文件中开启缓存,开启缓存有一定的规则(数组格式)。

‘HTML_CACHE_ON’=> true,

‘HTML_CACHE_RULES’=>array(

//需要缓存的动作名=>缓存的名称,缓存的生存周期

‘show’=>array(‘{:mole}_{:action}’,1000),

)

{:mole}代表当前的控制器名

{:action}代表当前的动作名(例如:show)

{$_GET}<=>{$Think.get.id} 简写形式{$_get}

通过地址栏传递一个id参数,可以实现单页面多缓存

(通常是前台有缓存,后台不缓存)

局部不缓存:

在TP框架中,局部不缓存可以通过js , ajax , jQuery实现局部不缓存

<scripttype="text/JavaScript">

var date=Date();

document.write(date);

</script>

工厂模式:通过传递不同参数获得不同的对象

单例模式:这个类只获得一个对象,再调用这个对象方法

缓存的增删改查

增:$cache->set(‘password’,’123’,30) 第三个参数是缓存的有效期

删:rm( ) 改:set( ) 查:get( )

序列化( serialize( ) ):保存数据的时候,将数组或者对象序列化成字符串,但是这个字符串保存了数组或者对象之前的结构和内容,当我们需要获得这个数据的时候,在将序列化的字符串反序列化成我们需要的数组或对象(unserialize( ))

例子:

public functionxv(){

//序列化与反序列化

$a=array('name'=>'xiaoming');

$x=serialize($a);

echo $x; //输出结果为:a:1:{s:4:"name";s:8:"xiaoming";}

echo "<br/>";

$f=unserialize($x);

print_r($f);//输出原来的数组格式

}

5. php如何循环反序列化

1.构造HITCON类反序列化字符串,其中$method='login',$args数组’username’部分可用于构造SQL语句,进行SQL注入,'password’部分任意设置。

2.调用login()函数后,利用username构造联合查询,使查询结果为SoFun类反序列化字符串,设置username构造联合查询,使查询结果为SoFun类反序列化字符串,设置username构造联合查询,使查询结果为SoFun类反序列化字符串,设置file=‘flag.php’,需绕过__wakeup()函数。

3.绕过oadData()函数对反序列化字符串的验证。

4.SoFun类 __destruct()函数调用后,包含flag.php文件,获取flag,需绕过__wakeup()函数

6. php的序列化和反序列化有什么好处

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。

PHP中的序列化和反序列化分别通过函数serialize()和unserialize()即可实现。serialize()的参数可以是resource类型外的所有变量类型,最常见的是用来序列化对象,unseialize()将serialize的返回结果作为参数,进行反序列化,得到原对象。

在PHP中,序列化和反序列化很多地方都可以用到!~

例如:数据库连接,序列化数组等等。

7. 请写出php变量序列化和反序列化的函数,并举出1个应用例子

PHP中的序列化和反序列化分别通过函数serialize()和unserialize()即可实现。serialize()的参数可以是resource类型外的所有变量类型,最常见的是用来序列化对象,unseialize()将serialize的返回结果作为参数,进行反序列化,得到原对象。$str = serialize ($obj);...$obj222 = unserialize($str);现在可以用$object222对象来执行该对象可以执行的各种操作。在用serialize序列化对象时,会自动调用__sleep方法,__sleep方法必须返回一个数组,包含需要串行化的属性。 PHP会抛弃其它属性的值, 如果没有__sleep方法,PHP将保存所有属性,包括private属性。用unserialize反序列化对象时,PHP 会调用__wakeup方法。__sleep和__wakeup方法可以根据实际需要,都添加上,也可以只要其中的一个,当然也可以都不要。下面给出一个序列化的代码:共serialize.php和unserialize.php两个文件。// serialize.php<?php
class User
{
private $name;
private $id;
public $sex="F";

function __construct()
{
//give user a unique ID 赋予一个不同的ID
$this->id = uniqid();
}

function __sleep()
{
//do not serialize this->id 不串行化id
return(array("name","sex"));
}

function __wakeup()
{
//give user a unique ID
$this->id = uniqid();
}

function p(){
echo "in function p() \t";
return $this->name;
}
function setname($name){
$this->name = $name;
}
} //create object 建立一个对象
$u = new User;
$u->setname("pphu");
//serialize it 串行化
$s = serialize($u);
echo "in serialize.php <br/>";
print_r($s);
echo "<br/>";
print_r($u);
echo "<br/><br/>";
?> //// unserialize.php<?php
include('serialize.php');
//global $s;
$u2 = unserialize($s);
echo "in unserialize.php<br/>";
echo $u2->p()."<br/>";
echo $u2->sex."<br/>";
print_r($u2);
?>

8. php的序列化和反序列化有什么好处

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。

PHP中的序列化和反序列化分别通过函数serialize()和unserialize()即可实现。serialize()的参数可以是resource类型外的所有变量类型,最常见的是用来序列化对象,unseialize()将serialize的返回结果作为参数,进行反序列化,得到原对象。

在PHP中,序列化和反序列化很多地方都可以用到!~

例如:数据库连接,序列化数组等等。

9. php数组序列化a:1:{i:0;s:1:"1"} 的详细解释

1、首先创建好一个数组然后序列化,array("table" => member, "field" => 1,"rule" => -0 ,"cycle" => 24 ,"max" => 1 )。

10. JSON PHP中,Json字符串反序列化成对象/数组的方法

如下所示:
<?php
//php反编码解析json信息
//json_decode(json字符串);
$city
=
array('shandong'=>'jinan','henan'=>'zhengzhou','hebei'=>'shijiazhuang');
$jn_city
=
json_encode($city);
//反编码json
$fan_city
=
json_decode($jn_city,false);//第二个参数false则返回object类型,false可以默认不写
var_mp($fan_city);//object(stdClass)#1
(3)
{
["shandong"]=>
string(5)
"jinan"
["henan"]=>
string(9)
"zhengzhou"
["hebei"]=>
string(12)
"shijiazhuang"
}
echo
"<br
/>";
$fan_city
=
json_decode($jn_city,true);//第二个参数true则返回array类型
var_mp($fan_city);//array(3)
{
["shandong"]=>
string(5)
"jinan"
["henan"]=>
string(9)
"zhengzhou"
["hebei"]=>
string(12)
"shijiazhuang"
}
手动写的JSON字符串一定要用单引号才能成功反序列化成对象/数组:
<?php
//json信息反编码
//不同php版本,对“纯json字符串”解析存在问题
//使用双引号定义的json字符串反编码操作变为null
//$jn
=
"{'name':'tom','age':'20','addr':'beijing'}";
//$fan_jn
=
json_decode($jn,true);
//var_mp($fan_jn);//NULL
//使用单引号定义的json字符串反编码操作会成功
$jn
=
'{"name":"tom","age":"20","addr":"beijing"}';
$fan_jn
=
json_decode($jn,true);
var_mp($fan_jn);
以上这篇JSON
PHP中,Json字符串反序列化成对象/数组的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:C#实现JSON字符串序列化与反序列化的方法jquery序列化form表单使用ajax提交后处理返回的json数据js解析与序列化json数据(二)序列化探讨Json序列化和反序列化方法解析Jquery
组合form元素为json格式,asp.net反序列化jQuery实现form表单元素序列化为json对象的方法浅析JSON序列化与反序列化JS实现json的序列化和反序列化功能示例js解析与序列化json数据(三)json的解析探讨JavaScript实现的反序列化json字符串操作示例

热点内容
实现秘闻存储的方法 发布:2025-02-08 10:23:33 浏览:168
怎么在微信发文件夹 发布:2025-02-08 10:09:45 浏览:795
cryengine源码 发布:2025-02-08 09:50:58 浏览:394
aardio可以反编译吗 发布:2025-02-08 09:50:53 浏览:484
公司营业执照密码是什么 发布:2025-02-08 09:47:56 浏览:855
体验脚本 发布:2025-02-08 09:46:15 浏览:691
医学生需要什么配置的笔记本 发布:2025-02-08 09:45:34 浏览:772
骚扰电话数据库 发布:2025-02-08 09:45:34 浏览:180
u盘文件加密器 发布:2025-02-08 09:40:35 浏览:770
plc数据存储app 发布:2025-02-08 09:37:17 浏览:709