php中的序列化与反序列化[喜悦原创]

php中的序列化与反序列化

1.serialize() <===> unserialize(),这个大家用的最多, 老熟人了
session保存默认用的就是这个.
如果想存储对象,数组数据等可以用(试试跟var_export()比较)

<?php
session_start
();
echo 
$foo serialize($_SESSION)
print_r(unserialize($foo));
?>
2.xmlrpc_encode, xmlrpc_decode 对应模块 php_xmlrpc
xmlrpc提供了php与xml格式间转换的方法.
参考http://www.xmlrpc.com/, http://www.ugia.cn
相信很多人都在用

<?php
echo $foo xmlrpc_encode($_ENV);
print_r(xmlrpc_encode($foo));
?>
3.wddx, 跟xmlrpc差不多 参考手册
应用搜搜google就知道了.

<?php
//wddx_serialize_vars();
echo $foo wddx_serialize_value($_SERVER);
print_r(wddx_deserialize($foo));
?>
4.JSON, 对应模块 php_json, 能实现跟js对象之间的转换,
提供的函数有两个json_encode(), json_decode();
应用及优势参考文章http://www.cswiki.com/blog/?p=70
google, yahoo都在用, prototype.js可以用header('X-JSON:...');
AJAX

<?php
//注意格式及中文问题
$foo '[{"uid":1000,"name":"abc"},{"uid":1002,"name":"def"},{"uid":1003,"name":"ghi"}]';
$bar json_decode($foo);
print_r($bar);
echo 
json_encode($bar);
?>
5.urlparam序列化  http_build_query()也算吧,反序列化方法很多,url过来的话apache就给处理好了
注意两个设置
arg_separator.output
arg_separator.input

string http_build_query ( array formdata [, string numeric_prefix]);

<?php
//可以是对象或整形下标数组,见手册
$foo = array(    'ids'=>array(520521522),
                
'action'=>'del'
);
echo 
http_build_query($foo);
?>
6.一个设置:unserialize_callback_func PHP_INI_ALL
[手册]:如果反序列器发现有未定义类要被实例化,将会调用反序列回调函数(使用未定义类作为参数)。
如果指定函数不存在,或者此函数没有包含/执行该未定义类,则显示警告。所以只有在你确实想要执行
这样的回调函数时才设置该选项。
(模块设置略)

<?php
ini_set
('unserialize_callback_func''unserialize_callback_func');

function 
unserialize_callback_func($str) {
    eval(
"class $str{}");
}

print_r(unserialize('O:3:"foo":1:{s:3:"bar";s:3:"bar";}'));
?>
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP序列化是将PHP对象转换为字符串的过程,以便在存储或传输时使用。序列化后的字符串可以通过反序列化操作重新还原为原始的PHP对象。\[1\] 在PHP,可以使用serialize()函数将对象序列化为字符串,然后使用unserialize()函数将字符串反序列化为对象。这样可以方便地在不同的环境传递和存储对象数据。 然而,反序列化操作也存在安全风险。恶意用户可以构造特定的序列化字符串,以触发PHP反序列化漏洞,导致代码执行或敏感信息泄露。因此,在进行反序列化操作时,需要谨慎处理输入数据,验证和过滤不可信的序列化字符串。 除了使用serialize()和unserialize()函数,还可以利用一些特殊的方式来触发PHP反序列化漏洞。例如,通过Phar反序列化,可以在不使用unserialize()函数的情况下触发PHP反序列化漏洞。当使用phar://伪协议读取phar文件时,会自动反序列化meta-data存储的信息,从而导致漏洞触发。\[2\]\[3\] 因此,在开发和使用PHP应用程序时,需要注意对序列化反序列化操作进行安全处理,避免潜在的安全风险。这包括对输入数据进行验证和过滤,限制反序列化操作的权限,以及及时更新和修复可能存在的漏洞。 #### 引用[.reference_title] - *1* *2* *3* [PHP序列化反序列化](https://blog.csdn.net/weixin_44033675/article/details/116809651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值