·文件处理
·写入一个文件
1,打开这个文件。如果这个文件不存在,需要先创建它
2,将数据写入这个文件
3,关闭这个文件
·从一个文件读出数据
1,打开这个文件。如果这个文件不能打开(例如,文件不存在),就应该意识到这一点并且正确退出
2,从这个文件中读出数据
3,关闭这个文件
·打开文件
要在php中打开一个文件,可以使用fopen()函数。当打开一个文件的时候,还需要指定如何使用它。也就是文件模式
·选择文件模式
打开一个文件,有三种选择,只读、只写、或者读和写。函数fopen()支持这三种方式的组合
·fopen()
·$_SERVER['DOCUMENT_ROOT'] :PHP预定义的几个变量之一;作用:获取当前Web服务器文档树的根目录(绝对路径)
使用'..'表示这个文档根目录的父目录
·在UNIX环境下,目录中的间隔符是正斜线(/)。如果是window平台,可以使用正斜线或者反斜线。如果使用反斜线,就必须使用
转义(标记为一个特殊)字符.
$fp = fopen("$_SERVER['DOCUMENT_ROOT']\\..\\orders\\orders.txt",'w');
·在PHP代码中,很少人使用反斜线,因为这意味着代码只能在Windows上运行
·fopen()函数的第二个参数是文件模式,它是一个字符串,指定了将对文件进行的操作
模式 模式名称 意义
r 只读 读模式---打开文件,从文件头开始读
r+ 只读 读写模式---打开文件,从文件头开始读写
w 只写 写模式---打开文件,从文件头开始写。如果该文件已存在,将删除所有文件已有内容。如果文件不存在,函数将创建这个文件
w+ 只写 写模式---打开文件,从文件头开始读写。如果该文件已存在,将删除所有文件已有内容。如果文件不存在,函数将创建这个文件
x 谨慎写 写模式打开文件,从文件头开始写,如果文件已存在,该文件将不会被打开,fopen()函数将返回false,而PHP将产生一个警告
x+ 谨慎写 写模式打开文件,从文件头开始读写,如果文件已存在,该文件将不会被打开,fopen()函数将返回false,而PHP将产生一个警告
a 追加 追加模式---打开文件,如果该文件已有内容,将从文件末尾开始追加写,如果该文件不存在,函数将创建这个文件
a+ 追加 追加模式---打开文件,如果该文件已有内容,将从文件末尾开始追加写(或者读),如果该文件不存在,函数将创建这个文件
b 二进制 二进制模式---用于与其他模式进行连接。如果文件系统能够区分二进制文件和文本文件,你可能会使用它。Windows系统可以区分,而UNIX则不区分。推荐一直使用这个选项,以便获得最大程度的可移植性。二进制模式是默认的模式
t 文本 用于与其他模式的结合,这个模式只是windows系统下一个选项。它不是推荐选项,除非你曾经在代码中使用了b选项

·正确的文件模式取决于系统如何使用它。我们已经使用了"w",这表示只可以将一个订单写入文件中。每当一个新订单被写入文件,它将覆盖以前的订单。这样做可能没有
什么意义,所有最好使用追加模式(以及推荐的二进制模式):
$fp = fopen("$_SERVER['DOCUMENT_ROOT']/../orders/orders.txt",'ab');
·fopen ()成功打开一个文件,该函数将返回一个指向这个文件的文件指针。在上面这个示例中
,文件指针保存在$fp中,当读者的确希望能够读写这个文件时,将使用这个变量来访问文件。
·解决打开文件时可能遇到的问题
当打开文件时,可能经常遇到的错误是试图也会在Windows平台上遇到)打开一个没有读写权限的文件(这种错误通常只会在类似UNIX的操作系统中见到,但是偶尔会在Windows平台上遇到。
·写文件
在php中写文件相对比较简单。可以使用fwrite()
·fwrite()参数
实际上,fwrite()具有3个参数,但是第3个参数是可选的。fwrite()的原型如下代码所示:
int fwrite ( resource handle , string [, int length])
第3个参数length是写入的最大字符数。如果给出了这个参数,fwrite()将向handle指向的文件写入字符串string,一直写到字符串的末尾,或者已经写入了length
字节,满足这两个条件之一就停止写入。
可以通过php的内置strlen()函数获得字符串的长度:
fwrite($fp , $outputstring , strlen($outputstring));
当使用二进制模式执行写操作时,你可能希望使用第3个参数,因为它可以帮助你避免一些跨平台兼容问题
·关闭文件
当使用完文件后,应该将其关闭。应该按照如下所示的方式调用fclose()函数
fclose($fp);
如果该文件成功地关闭,函数将返回一个null值。反之,该函数将返回false。通常,关闭文件的操作并不像打开文件容易出错,所以这个示例中并没有对该操作进行测试
·读文件
//以只读模式打开文件:fopen()
$fp = fopen("$document_root/../orders/orders.txt",'rb');
flock($fp,LOCK_SH) // lock file for reading
//feof($fp) 知道何时读完文件,feof()的唯一参数是文件指针。如果文件指针指向了文件末尾,它将返回true
while(!feof($fp)){
$order = fgets($fp); // 从文件中每次读取一行内容。
echo "$order<br />";
}
flock($fp,LOCK_UN); // release read lock
fclose($fp);

·每次读取一行数据
·fgets() //每次读取一行内容。这样,它将不断地读入数据,直至读到一个换行字符 (\n),或者文件结束符EOF
·fgetss() //fgets()的一个变体
原型:string fgetss(resource fp[, int length[,string allowable_tags]]);
与fgets()非常相似,但是它可以过滤字符串中包含的PHP和HTML标记。如果需要保留任何特殊的标记,可以将它们包含在allowable_tags字符串中
出于安全考虑可以使用fgetss()函数
·读取整个文件
·readfile()
//你几乎可以使用下述语句代替前面所编写的所有脚本
readfile("$document_root/../orders/orders.txt")
//执行流程:打开这个文件,并将文件内容输出到标准输出(浏览器中),然后再关闭这个文件,原型如下:
int readfile(string filename ,[bool use_include_path[,resource content]]);
//返回值是从文件中读取的字节数
·file_get_contents()
//该函数与readfile()相同,但是该函数将以字符串的形式返回文件内容,而不是将文件内容回显到浏览器中。
·读取任意长度
fread()
读取一个文件的最后一种方法是使用fread() 函数从文件中读取最大任意长度的字节
string fread(resource fp, int length);
注:本人测试,此方法不适合网络资源(http)
·使用其他文件函数
·查看文件是否存在:file_exists()
在不打开一个文件的前提下,检查一个文件是否存在
file_exists("demo.php");
·确定文件大小:filesize()
它以字节为单位返回一个文件的大小,结合 fread()函数,可以使用它们一次读取整个文件(或者文件的某部分)
filesize("demo.php");
·删除一个文件unlink()
unlink("demo.php");
如果无法删除这个文件,该函数将返回false。通常原因是对该文件的访问权限不够或者该文件不存在
·文件锁定
为了解决并发问题,建议使用文件锁定。在PHP中,文件锁定是通过flock()函数来实现的。当一个文件被打开并且在进行读写操作之前,应该调用这个函数。原型:
bool flock ( resource fp , int operation [, int &wouldblock);
还必须将一个指向被打开的文件的指针和一个表示锁定类型的常数作为参数传递给这个函数。如果锁定成功,则返回true。如果获得文件锁将导致当前的进程被阻塞(也就是,不得不等待)
操作值:
LOCK_SH --- 读操作锁定。意味着文件可以共享,其他人可以读该文件
LOCK_EX --- 写操作锁定。这是互斥的,该文件不能共享
LOCK_UN --- 释放已有的锁定
LOCK_NB --- 方式在请求加锁时发生阻塞(windows不支持)
联想:如果有两个脚本同时申请对一个文件加锁,情况又会如何呢?这将导致竞争条件的问题,这两个进程将竞争加锁,但是无法确定哪个进程将会成功,这样
就会导致更多的问题。使用数据库管理系统,可以很好的解决这写问题
·当文件变大,使用普通文件将会变得非常慢
·在一个普通文件查找特定的一个或者一组记录将会非常困难
·处理并发访问可能会遇到问题。如果有太多的访问量,在能够创建订单之前大量的用户就可能必须等待该文件解锁
·在文件中文插入记录和删除记录太难
·没办法区分不同权限的数据访问
·最简单的方法:
·file_get_contents
//将整个文件读入一个字符串
//file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
file_get_contents(path,include_path,context,start,max_length)
·file_put_contents()
//函数把一个字符串写入文件中。与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
file_put_contents(file,data,mode,context)
参数data --- 可选。规定要写入文件的数据。可以是字符串、数组或数据流。

转载于:https://www.cnblogs.com/cl94/p/11261787.html

php基础系列之 数据的存储和读取相关推荐

  1. iOS沙盒路径及路径下数据的存储和读取

    2019独角兽企业重金招聘Python工程师标准>>> iOS应用都被限制在"沙盒"中,"沙盒"相当于一个加了仅主人可见权限的文件夹,苹果对沙 ...

  2. Android数据存储之文件存储(瞬时数据的存储与读取)项目已上传GitHub

    GitHub地址: https://github.com/Skymqq/FileSave.git 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然 ...

  3. python爬虫系列之数据的存储(二):csv库的使用

    上一篇我们讲了怎么用 json格式保存数据,这一篇我们来看看如何用 csv模块进行数据读写. 一.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因 ...

  4. jupyther_python基础系列 08 第八章 文件异常和模块

    第八章 文件异常和模块 文件的读写 文件的打开 文件的打开通用格式 "对文件进行相应的读写操作"``` 使用 with 执行完毕 自动进行close操作[例1] 一个见到那的文件读 ...

  5. 赶紧进来修内功--- 详细讲解在内存中数据的存储方式(整形篇)

    本文详细介绍了所有整形家族类型的取值范围;整形数据在内存中的存储方式(大小端存储方式)以及对应的解析,介绍讲解判断当前机器的存储方式代码练习题,掌握后编程基础更进一步牢固!!! 数据的存储 一.整形数 ...

  6. ESP32_学习笔记(一)NVS的操作(存储和读取大数组)(为什么存入数据成功,读取却为零的原因)

    目录 ESP32_学习笔记(一)NVS的操作 前言 函数介绍 创建句柄: 定义存储空间: 打开函数: 存储函数: 读取函数: 提交函数: 关闭函数: 易错点提醒:为什么明明存入了,读取的值为0 这就是 ...

  7. Python Json存储与读取

    前言 Python 中的文件数据存储和读取可以说是非常方便了,这里记录一下 JSon 数据的存储和读取,需要用到的模块就是 json,该模块能够将简单的 Python 数据结构转储到文件中,并在程序再 ...

  8. GIS海量数据的存储和读取

    虽然现在硬件发展很快,内存.CPU等硬件指标都有很大的提高,但要PC机上处理GIS海量数据,还是显得比较吃力,而核心问题就在GIS数据的存储和读取上,这里主要涉及到三个子问题:1,图元是按怎样的顺序存 ...

  9. 大数据入门基础系列之初步认识大数据生态系统圈(博主推荐)

    不多说,直接上干货! 之前在微信公众平台里写过 大数据入门基础系列之初步认识hadoop生态系统圈 http://mp.weixin.qq.com/s/KE09U5AbFnEdwht44FGrOA 大 ...

最新文章

  1. 七里香飘传来的幸福简单爱
  2. 关于x86、i386、i486、i586和i686等名词的解释
  3. c++学习总结:extern声明全局变量
  4. SpringMVC获取参数的几种方式
  5. 小米为其他手机适配rom_让小米引以为傲的MIUI,为什么不再给其它手机适配了?...
  6. 【github系列】github上传文件时忽略部分文件类型
  7. 【labelme软件】使用指南
  8. php swfupload handlers.js,PHP swfupload图片文件上传实例代码
  9. css3中-moz、-ms、-webkit各什么意思
  10. 第1章 弗洛依德——精神分析
  11. 今天第一次解决了程序在未装VS和XP下运行的问题
  12. 《断舍离(心灵篇)》-[日]山下英子
  13. Web全栈工程师年薪40w+,凭什么?
  14. 使用虚拟机备份软件备份Microsoft Hyper-V 虚拟机
  15. U深度U盘启动盘制作工具怎么用?U深度U盘启动盘制作工具使用教学
  16. Missing parentheses in call to 'print'
  17. 十二届蓝桥杯第四期模拟比赛
  18. JS之使用Echarts画出人际关系图
  19. Unity调用Android封装的声网sdk
  20. 自然语言处理入门-第4章 隐马尔可夫模型与序列标注

热门文章

  1. java批量导入和批量删除_MyBatis 实现批量插入和删除中双层循环的写法案例
  2. mysql limit 1 10000_Mysql面试题,优化:SELECT * FROM user LIMIT 10000,1.
  3. Deformation Transfer for Triangle Meshes
  4. DE22 Using Laplace Transform to Solve ODEs with Discontinuous Inputs
  5. pytorch图像预处理
  6. 利用kaggle训练模型
  7. 深度学习:波士顿房价预测
  8. 金融数据分析之pdfplumber提取年报PDF关键数据(其他PDF数据通用)
  9. Unet实现文档图像去噪、去水印
  10. 机器学习入门系列:关于机器学习算法你需要了解的东西、如何开发机器学习模型?...