php -- 用文本来存储内容,file_put_contents,serialize,unserialize

根据存储的内容来划分

字符串:

file_put_contents :将一个字符串写入文件

语法:int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource$context ]] )

参数

filename:要被写入数据的文件名。

data:要写入的数据。类型可以是 string,array 或者是 stream 资源(如上面所说的那样)。

如果 data 指定为 stream 资源,这里 stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。

参数 data 可以是数组(但不能为多维数组),这就相当于 file_put_contents($filename, join('', $array))

flags:flags 的值可以是 以下 flag 使用 OR (|) 运算符进行的组合。

Available flags
Flag描述
FILE_USE_INCLUDE_PATH在 include 目录里搜索 filename。 更多信息可参见 include_path。
FILE_APPEND如果文件 filename 已经存在,追加数据而不是覆盖。
LOCK_EX在写入时获得一个独占锁。

context:一个 context 资源。

//没有使用flag
<?php $file = 'people.txt'; // Open the file to get existing content $current = file_get_contents($file); // Append a new person to the file $current .= "John Smith\n"; // Write the contents back to the file file_put_contents($file, $current); ?>
//使用flag <?php $file = 'people.txt'; // The new person to add to the file $person = "John Smith\n"; // Write the contents to the file, // using the FILE_APPEND flag to append the content to the end of the file // and the LOCK_EX flag to prevent anyone else writing to the file at the same time file_put_contents($file, $person, FILE_APPEND | LOCK_EX); ?>

 

 

非字符串

序列化:产生一个可存储的值(字符串)的表示。即,将对象或者数组等,转换为可存储到文件中的类型(字符串)

语法:string serialize ( mixed $value )

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

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

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

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

序列化:

<?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)) {/* 出错 */}
}
?>

 

 

反序列化:unserialize() 对单一的已序列化的变量(字符串)进行操作,将其转换回 PHP 的值。

语法:mixed unserialize ( string $str )

str:序列化后的字符串。

若被解序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。

Note: unserialize_callback_func 指令

如果在解序列化的时候需要实例化一个未定义类,则可以设置回调函数以供调用(以免得到的是不完整的object “__PHP_Incomplete_Class”)。可通过php.iniini_set() 或 .htaccess 定义‘unserialize_callback_func’。每次实例化一个未定义类时它都会被调用。若要禁止这个特性,只需置空此设定。

<?php
// 这里,我们使用 unserialize() 装载来自数据库的 $session_data 数组中的会话数据。
// 此例是描述 serialize() 的那个例子的补充。$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata) || !odbc_fetch_into($stmt, $tmp)) {// 如果执行出错或返回错误,则初始化为空数组$session_data = array();
} else {// 现在我们需要的是 $tmp[0] 中已序列化的数据。$session_data = unserialize($tmp[0]);if (!is_array($session_data)) {// 出错,初始化为空数组$session_data = array();}
}
?>

 

unserialize_callback_func 例子

<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';// unserialize_callback_func 从 PHP 4.2.0 起可用
ini_set('unserialize_callback_func', 'mycallback'); // 设置您的回调函数function mycallback($classname) 
{// 只需包含含有类定义的文件// $classname 指出需要的是哪一个类
}
?>

 

unserialize,将对应的字符串,反过来构造成原来的数据类型

 

 

为什么不是Person类的对象呢?

因为要得到一个类的对象,必须要保证当前类已经被加载。

解决方法:在事先加载对应的类即可。

 

反序列化自动加载

 

 

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

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

相关文章

python入门html_python-html入门

网页三剑客&#xff1a;HTML、CSS、JS上网就是下载网页&#xff0c;web页面是浏览器的执行结果&#xff0c;浏览器是代码解释器超文本&#xff1a;指页面内容可以包含图片、链接、音乐、程序等非文本元素。标签语言特点&#xff1a;简单<>标签属性&#xff1a;1)键值对2)…

Android一些知识总结

Android一些知识总结 近来看zp的android视频&#xff0c;按照他的视频中开发了几个小软件&#xff0c;学到了一些自己以前都没有学到的知识&#xff0c;所以在这儿总结一下&#xff0c;偶尔温习对自己有很大的帮助吧。 1.关于paddingLeft和layout_marginLeft&#xff1a; andro…

linux aemv7,无法在我的Ubuntu machin中安装“xlwings”

我试图在我的Ubuntu机器上安装xlwings模块&#xff0c;但失败如下pip3 install xlwingsCollecting xlwingsUsing cached https://files.pythonhosted.org/packages/cc/c9/6bb1849dbee6e8a40beb9a0d21df9787bee45cda1d0bb575a0cd388dd260/xlwings-0.15.3.tar.gzComplete output …

女朋友当众甩了我一巴掌,我扑上去......

1 小朋友&#xff0c;你是否有很多问号&#xff1f;▼2 小鸟&#xff1a;我呸&#xff01;秀什么秀&#xff1f;没眼看&#xff01;▼3 开学后你的上课状态......▼4 不能总让保安叔叔拿枪指我▼5 哥哥&#xff1a;让我看看&#xff0c;我妹妹怎么那么可爱&#xff01;▼6…

为什么我们要做2021.NET中国开发者调研

今年7月的时候&#xff0c;由上海MS Reactor牵头&#xff0c;我们做了一次小型的闭门会议。主要是围绕.NET开源方向进行讨论。 数闪科技的技术总监谷首道给我们带来的消息是他们有意将公司目前正在研发和使用的一整套技术框架进行开源。亲切可爱的辛老师、盛派创始人苏震巍、数…

Linux PCI 设备驱动基本框架(一)

Linux将所有外部设备看成是一类特殊文件&#xff0c;称之为“设备文件”&#xff0c;如果说系统调用是Linux内核和应用程序之间的接口&#xff0c;那么设备驱动程序则可以看成是 Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件在实现上的细节&#xff0c;使…

Request对象

当客户端发出请求执行asp.net程序时&#xff0c;CLR会将客户端的请求信息包含在Request对象中。这些请求信息包括请求报头&#xff0c;客户端的基本信息&#xff08;如浏览器类型&#xff0c;浏览器版本号&#xff0c;用户所用的语言以及编码方式等&#xff09;&#xff0c;请求…

sql连接远程服务器索引超出了_手机怎么连接服务器远程桌面?RD client远程桌面使用教程...

大家好啊&#xff0c;现在很多游戏、应用为了体验感好、方便使用都实现了多端同步&#xff0c;服务器远程连接也不例外&#xff0c;今天给你们分享手机连接服务器远程桌面的操作方法【 好东西一起分享&#xff0c;好音乐一起听 】不管是安卓还是苹果手机&#xff0c;咱们都需要…

java垃圾回收机制

为什么80%的码农都做不了架构师&#xff1f;>>> Java垃圾回收机制 C程序员觉得内存管理太重要了,所以一定需要自己管理, java程序员觉得内存管理太重要了,所以一定不能自己管理! 一、简述 垃圾回收是一种动态存储管理技术&#xff0c;它自动地释放不再被程序引用的…

C语言顺序结构程序设计PPT,C语言21(顺序结构程序设计之1).ppt

《C语言21(顺序结构程序设计之1).ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《C语言21(顺序结构程序设计之1).ppt(28页珍藏版)》请在人人文库网上搜索。1、上一节我们学了,C语言程序的结构 C语言程序的书写规范,第2章 最简单的C程序设计,-顺序程序设计,C程序常…

神PS!老爸把儿子的画作P成现实,看完我笑哭了

全世界只有3.14 % 的人关注了爆炸吧知识只要你敢画&#xff0c;我就敢P成现实这种脑洞大开的事发生在英国的一对父子身上儿子天马行空地乱画爸爸认认真真地P出来象君几年前在ins发现了这对宝藏父子没想到他们的疯狂依旧在继续着四脚怪物系列看上去好像也没什么毛病你就是我见过…

单体应用 适合采用 dapr 构建吗?

缘起今天在微信群里有同学问 ”纯.net 项目&#xff0c;有必要上dapr吗&#xff1f;” 当时不假思索的说不是微服务没必要&#xff0c;其他群友也说没必要。下午细想了一下&#xff0c;觉得这个和微服务没有关系&#xff0c;如果我的应用是个单体架构&#xff08;将所有功能都部…

在主窗体中打开一个新子窗体,如果已有子窗体,则激活它,而不打开新的。...

frmGroupMgr fgm null; //遍历窗体中是否已存在同名的子窗体 foreach (Form f in this.MdiChildren) { //检测是不是当前子窗体名称 if (f.Text "组管理") { f.Activate(); fgm f as frmGroupMgr; break; } } //窗体中没有该子窗体 则打开一个新窗体 if (fgm nul…

EqualLogic全攻略视频[(四)高级管理]

制片人&#xff1a; 戴尔中国大客户部高级市场经理 Andy Peng 彭宇恒 演讲者&#xff1a; 戴尔亚太区存储技术总监 Alvin Kho 许良谋 戴尔中国高级系统工程师 English Li 李英文 EqualLogic全攻略视频[&#xff08;四&#xff09;高级管理] 更多精彩文章请关注: 戴尔技术社区转…

一次面试引发的思考(中小型网站优化思考) (转)

前言 故事的起因是这样的&#xff0c;由于本人地处偏僻工作地点在美丽的冰城哈尔滨虽然地方很美丽&#xff0c;但是这里的软件行业实在是算不上“美丽”&#xff0c;这么多年由于个人原因或者公司原因经常换工作&#xff0c;因为这里都是中小型公司&#xff0c;没有什么大公司。…

string 字符串中字符无效_JavaScript中的字符串(string)到底是什么?

通过可见字符建模把JavaScript中的string当作字符序列来看待是最直观的&#xff0c;虽然这样并不准确。以下代码示例中的字符串由5个字母和一个感叹号组成&#xff1a;const message Hello!;如果把string当作是可见的字符序列&#xff0c;那么Hello!中的字符数是6&#xff1a;…

c语言二维数组代码,C语言之二维数组(示例代码)

二维数组及其指针1 ) 在了解二维数组之前&#xff0c;我们先来了解一维数组及其指针我们知道&#xff0c;一维数组中&#xff1a;数组名代表-->数组首元素的首地址(千万不要认为是数组的首地址(&a)&#xff0c;绝对不是)在内存中&#xff0c;该代码的表现形式如下图&…

颜宁分享干货:给实验室博士的一些忠告

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;颜宁微博nyouyou&#xff0c;作者&#xff1a;颜宁前几日&#xff0c;颜宁在微博上与大家分享自己做实验记录的心得。在此贴出&#xff0c;与大家分享~从我进Shi Lab的第一天&#xff0c;就被导师灌输&#xff1a;好…

研发考核难的本质是因为这三个特点

大家好&#xff0c;我是Z哥。我坦白&#xff0c;这篇是早就写好的库存文章&#xff0c;包括上周的那篇也是。原因是最近跳槽了&#xff0c;到新公司忙得飞起&#xff0c;都没时间写文章。还好我之前未雨绸缪准备了几篇提前写好的文章作为余量&#xff5e;我尽量能保持不断更&am…

点击User Profile Service Application 报错

给客户部署的MOSS2010 SP1版本&#xff0c;部署完毕后&#xff0c;发现点击User Profile Service Application服务进行配置的时候&#xff0c;总是报错&#xff0c;上网查了一下&#xff0c;发现原来是微软的一个补丁包没有安装&#xff0c;于是下载了这个几乎1G的补丁包&#…