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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

java垃圾回收机制

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

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

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

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

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

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

前言 故事的起因是这样的&#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…

剑指offer-面试题13.在O(1)时间删除链表节点

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 链表节点与函数的定义如下。 通常我们删除某个节点都是从头开始遍历到需要删除节点的前一个节点。 然后使得该节点的next指向删除节点的next即可&#xff0c;这样看来删除一个节点 的复杂度为O(n)…

为什么不能一次走遍哥尼斯堡的7座桥

全世界只有3.14 % 的人关注了爆炸吧知识数学的快乐到底有多简单今天&#xff0c;8岁表妹问了一个问题&#xff1a;看到这种类似11&#xff1f;的问题&#xff0c;超模君几乎不用思考就已经知道答案。但为了体现让表妹系统的理解知识&#xff0c;所以我决定......发生在哥尼斯堡…

官宣,11月8号,.NET6+64位VS璀璨面世!

12号&#xff0c;.NET6 RC2发布&#xff0c;13号&#xff0c;VS2022 RC版发布&#xff0c;11月8号&#xff0c;.NET6VS2022C#10 正式版将同时发布&#xff0c;.NET开发将步入全新篇章&#xff0c;各种新语法、新框架、新技术都如约而至&#xff0c;令人期待&#xff01;然而&am…

Python-技巧

0.推荐的扩展 requests urilib的替代品 BeautifulSoup4 解析HTML代码 rq 任务队列 selenium 自动化测试工具&#xff0c;模拟浏览器 1.sys.modules, 根据已加载的模块创建对象, 其中 page 为类名 if hasattr(sys.modules[__name__], page):setattr(self, page, getattr(sys.mod…

暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...

全世界只有3.14 % 的人关注了爆炸吧知识提高版&#xff0c;来了&#xff01;这一份大部分人都没有见过的资料。它是我国出版的第一套数学竞赛的系列图书。前段时间&#xff0c;超模君给大家分享了这一系列的初中版奥数基础篇&#xff0c;得到了大家热烈的反响。于是&#xff0c…

COSCon21 开源文化 (GL) 论坛介绍

“ 点击蓝字 / 关注我们 ”| 作者、编辑&#xff1a;袁睿斌| 设计&#xff1a;朱亿钦、宋传琪第六届中国开源年会 (COSCon21) 将于 10月30-31日 由开源社举办。本次年会重新回归线下&#xff0c;让小伙伴们的面基成为了可能。届时&#xff0c;北京、上海、深圳、成都、珠海、大…

android wifi

<!-- 以下是使用wifi访问网络所需要的权限 --> <uses-permission android:name"android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name"android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:n…

1.5.2 在IIS上配置ASP.NET(转)

1.5.2 在IIS上配置ASP.NET 在服务器上部署ASP.NET网站时&#xff0c;需要.NET的运行环境.NET Framework。.NET Framework类似于Java的JDK&#xff0c;包含有.NET程序运行环境和命令行编译工具。如果服务器上没有安装.NET Framework&#xff0c;这就需要从微软网站下载&#xf…

51单片机外部地址c语言,cx51与c语言对单片机内部和外部资源变量和地址的定义是否兼容?为什么...

span namewhlm idwhlm原因:classpath没有设置好系统变量->新建->变量名&#xff1a;CLASSPATH 变量值&#xff1a;.;%JAVA_HOME%\lib(CLASSPATH中有一英文句号“.”后跟一个分号&#xff0c;表示当前路径的意思)在Classpath里面你可以直接指定一个包名&#xff0c;比如你…