php+反序列化方法,PHP序列化反序列化的方法详解

在一些开源的php源代码中,我们经常看到一些配置文件里面存放的是一些类似带有格式的变量名称和值。刚开始还不明白这个是怎么回事儿。后来才知道这个是为了将一个复杂(也可能并不那么复杂)的数据结构转换成一个字符串,以便于保存和传递。其实就是一个序列化的过程,在需要用到这些数据库的时候会进行一个反序列化过程,就是将这个字符串再还原成他原来的数据结构。下面说说 php 如何进行数据的序列化和反序列化的。

php 将数据序列化和反序列化其实就用到两个函数,serialize 和 unserialize。

serialize 将数组格式化成有序的字符串

unserialize 将数组还原成数组

例如:

$user=array('Moe','Larry','Curly');

$user=serialize($stooges);

echo '

';

print_r($user);

echo '
';

print_r(unserialize($user));

结果:

a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}

Array ( [0] => Moe [1] => Larry [2] => Curly )

注意当数组值包含如双引号、单引号、冒号或中文等字符时,它们被反序列化后,可能会出现乱码或格式被打乱的问题。解决这个问题可以使用 base64_encode 和 base64_decode 两个函数。

例如:

$user=array('Moe','Larry','Curly');

$user=base64_encode(serialize($user));

$user=unserialize(base64_decode($user));

这样就不会出现乱码类的问题了,但是 base64 编码却增加了存储字符串的长度。对于这个问题,可以使用 gzcompress 来解决。

由以上我们可以总结出一个自己的序列化和反序列化的函数来,如下:

function my_serialize($obj_array){

return base64_encode(gzcompress(serialize($obj_array)));

}

//反序列化

function my_unserialize($str){

return unserialize(gzuncompress(base64_decode($str)));

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

像数据科学家一样思考:12步指南(上)

介绍 目前,数据科学家正在受到很多关注,因此,有关数据科学的书籍正在激增。我看过很多关于数据科学的书籍,在我看来他们中的大多数更关注工具和技术,而不是数据科学中细微问题的解决。直到我遇到Brian Godsey的“像数…

Mybatis-plus 大数据量数据流式查询通用接口

文章目录一、案例需求二、使用案例:2.1. 自定义查询接口2.2. 逻辑处理类2.3. 调用案例2.4. 具体逻辑处理案例三、企业案例3.1. key名称获取3.2. 逻辑类测试3.3.最后一个批次处理方案四、 通用SQL预编译处理4.1. 业务场景4.2. xml形式4.3. 注解形式五、企业案例5.1. …

基于MaxCompute的数仓数据质量管理

声明 本文中介绍的非功能性规范均为建议性规范,产品功能无强制,仅供指导。 参考文献 《大数据之路——阿里巴巴大数据实践》——阿里巴巴数据技术及产品部 著。 背景及目的 数据对一个企业来说已经是一项重要的资产,既然是资产&#xff…

php封隔器座封原理,封隔器的基本结构及工作原理

要做到单井的分采分注,首先必须有一种井下工具将各油层分开。封隔器就是下人套管内,利用其弹性密封元件的变形来封隔油、气、水层的一种最重要的井下工具。封隔器接在油管柱的适当部位或下部,这种带封隔器和其他井下工具的油管柱叫做井下工艺…

IP应用加速 – DCDN迈入全栈新篇章

4月11日,第七届"亚太内容分发大会"暨CDN峰会国际论坛中,阿里云资深技术专家姚伟斌发布了DCDN子产品IP应用加速(IPA)。IPA是基于阿里云CDN本身的资源优化,对传输层(TCP&UDP)协议进…

linux环境 Oracle客户端连接远程Oracle服务端

前提:su - oracle #格式: sqlplus 用户名/密码ip地址:端口 sqlplus system/123456192.168.0.128:1521 #格式2: sqlplus 用户名/密码ip地址:端口/SID sqlplus system/123456192.168.0.128:1521/orcl

十年磨一剑,王坚自研的MaxCompute如何解决世界级算力难题

大数据时代,随着企业数据规模的急剧增长,传统软件已无法承载,这也推动了大数据技术的发展,Google、AWS、微软等硅谷巨头纷纷投入大数据技术的研发;而在国内,王坚也在十年前带领阿里云团队研发MaxCompute&am…

matlab和robotstudio,MATLAB与Robotstudio建立socket通信(初探)

前记:听一首《不想病》,歌词唱开头:做什么都不对,说什么都浪费,想什么我都可悲....;感觉就是不一样,好歌!哎,,,回到正题。好多事要去做,还得挤时间…

贾扬清:我对人工智能方向的一点浅见

阿里妹导读:作为 AI 大神,贾扬清让人印象深刻的可能是他写的AI框架Caffe ,那已经是六年前的事了。经过多年的沉淀,成为“阿里新人”的他,对人工智能又有何看法?最近,贾扬清在阿里内部分享了他的…

Node.js 应用故障排查手册 —— 类死循环导致进程阻塞

类死循环导致进程阻塞 楔子 在实践篇一中我们看到了两个表象都是和 CPU 相关的生产问题,它们基本也是我们在线上可能遇到的这一类问题的典型案例,而实际上这两个案例也存在一个共同点:我们可以通过 Node.js 性能平台 导出进程对应的 CPU Pro…

如何使用5个Python库管理大数据?

来源 | medium编译 | 武明利责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)如今,Python真是无处不在。尽管许多看门人争辩说,如果他们不使用比Python更难的语言编写代码,那么一个人是否真是软件开发人员&…

php findbysql,hibernate的findByExample

用了这么长时间的hibernate/spring,如果不是今天用的findByExample方法到现在还不知道findByExample的机制。惭愧Class User{String username;String password "默认口令";Company company;getter()&setter().....}Company company companyDao.getB…

如何把创建ECS(CreateInstance)作为触发器来触发函数计算

问题描述 函数计算虽然不支持直接集成到ECS的管控事件上,但是函数计算本身是支持日志服务作为触发器的。即可以配置日志服务中logstore里的增强日志作为触发器来触发函数计算服务中的函数,同时可以传递project 和 logstore的name以及beginCursor/endCur…

ORACLE添加字段、删除字段

文章目录1. 删除表2. 创建表3. 添加字段4. 删除指定字段5. 修改指定字段长度1. 删除表 DROP TABLE SYS_JOB;2. 创建表 -- CREATE TABLE CREATE TABLE SYS_JOB (JOB_ID NUMBER(30) NOT NULL,JOB_NAME VARCHAR2(30) NOT NULL ); ALTER TABLE SYS_JOB ADD CONSTRA…

像数据科学家一样思考:12步指南(中)

像数据科学家一样思考:12步指南(上)《像数据科学家一样思考》 7-工程产品 下一步是建立统计软件。如果统计是分析和从数据中得出结论的框架,那么软件就是将这个框架付诸行动的工具。数据科学家必须为任何项目做出许多软件选择。如…

2020云计算,是四强争霸还是赢家通吃?

来源 | 架构师技术联盟责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)近日,谷歌母公司Alphabet首次公布了谷歌云计算业务的数据,这一举动将云计算行业重新推到了聚光灯下。众所周知,全球云市场竞争激烈&…

centos中mysql操作命令,Linux系统中MySQL的常用操作命令

服务:# chkconfig --list 列出所有系统服务# chkconfig --list | grep on 列出所有启动的系统服务# chkconfig --list mysqld# whereis mysql 查看文件安装路径# which mysql 查询运行文件所在路径(文件夹地址)usr/bin/mysql 是指:mysql…

加载程序中数据库账号密码加密策略wallet_04

文章目录1. 切换到oracle用户2. 创建wallet目录3. 创建wallet 账户4. 查看创建的wallet5. 创建wallet目录6. 查看证书7. 把证书拷贝到客户端8. 在客户端的sqlnet.ora里添加9. 客户端的tnsnames.ora10. 测试登陆11. oracle环境变量oracle服务端创建wallet 1. 切换到oracle用户 …

利用丁香园数据生成疫情分布地图(R语言)| 博文精选

来源 | CSDN 博客作者 | 万里写入胸怀间责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)疫情牵动大家,除了做好分内工作,管好自己不给社会添乱,也就是只能持续关注疫情了。现在各大门户平台都上线了疫情实时地…

php连接数据库性能测试,无需安装配置,多操作系统支持数据库及性能测试

iBoxDB是一个NoSQL数据库, 有SQLite的特性,但拥有更强大的Replication功能,支持更多的数据类型,自动完成ORMSQLite是全球知名度Top 10的数据库之一, 在文章 中对 SQLite 与 MySQL进行了一个事务中1万次插入测试, 测试的结果是"sqlite3用时仅0.4s,mysql用时2.2s"iBoxD…