PHP文件读写操作相关函数总结


Posted in PHP onNovember 18, 2014

一、fwrite()写入文件

将程序中的数据保存到文件中比较容易,使用fwrite()函数就可以将字符串内容写入文件中。在文件中中通过字符序列\n表示换行符,表示文件中一行的末尾。当需要一次输入或输出一行信息时,请记住这一点。不同的操作系统具有不同的结束符号,基于UNIX的系统使用“\n”作为行结束字符,基于Windows系统使用“\r\n”作为行结束字符,基于Macintosh的系统使用“\r”作为行结束字符。当要写入一个文本文件并想插入一个新行时,需要使用相应操作系统的行结束符号。函数fwrite()的原型如下所示:

int fwrite(resource handle,string string[,int length])           //写入文件

第一个参数需要提供fopen()函数打开的文件资源,该函数将第二个参数提供的字符串内容输出到由第一个参数指定的资源中。如果给出了第三个可选参数lenth,fwrite()将在写入了length个字符时会停止。否则将一直写入,直到到达内容结尾时才停止。如果写入的内容少于length个字节,该函数也会在写完全部内容后停止。函数fwrite()执行完成以后会返回写入的字符数,出现错误时则返回FALSE。下面的代码是写入文件的一个示例。
<?php

//声明一个变量用来保存文件名

$fileName = "data.txt";

//使用fopen()函数以只写的模式打开文件,如果不存在则创建它,打开失败则通过程序

$handle = fopen($fileName,'w') or die('打开<b>'.$fileName.'</br>文件失败!!');

//循环10次写入10行数据到文件中

for($row=0;$row<10;$row++){

fwrite($handle, $row.":www.lampbrother.net\n");

}

fclose($handle);

?>

该程序执行后,如果当前目录下存在data.txt文件,则清空该文件并写入10行数据。如果不存在data.txt文件,则会创建该文件并将10行数据写入。另外写入文件还可以使用fputs()函数,该函数是fwrite()函数的别名函数如果需要快速写入文件,可以使用file_put_contents()函数,和依次调用fopen(),fwrite()以及fclose()函数的功能一样。该函数的使用代码如下所示:

<?php

//声明一个变量用来保存文件名

$fileName = "data.txt";

//声明一个变量用来保存被写入文件中的数据

$data = "共10行数据\n";

for($row=0;$row<10;$row++){

//将10数据都存放到一个字符串变量中

$data .= $row.":www.lampbrother.net\n";

}

//一次将所有数据写入到指定的文件中

file_put_contents($fileName, $data);

?>

该函数可以将数据直接写入到指定的文件中。如果同时调用多次时,并向同一个文件中写入数据,则文件中只保存了最后一次调用该函数写入的数据。因为在每次掉哟哦那个时都会重新打开文件并将文件中原有的数据清空,所以不能像第一个程序那样连续写入多行数据。

二、读取文件内容

在PHP中提供了多个从文件中读取内容的标准函数,可以根据它们的功能特性在程序中选择哪个函数使用。这些函数功能及其描述如下表所示。

PHP文件读写操作相关函数总结

在读取文件时,不仅要注意行结束符号“\n”,程序也需要一种标准的方式来识别何时到达文件的末尾,这个标准通常成为EOF(End Of File)字符。EOF是非常重要的概念,几乎每种主流的编程语言中都提供了相应的内置函数,来分析是否到达了文件EOF。在PHP中,使用feof()函数。该函数接受一个打开的文件资源,判断一个文件指针是否位于文件的结束处,如果在文件末尾处,则返回TRUE。

①函数fread()

该函数用来在打开的文件中读取指定长度的字符串。也可以安全用于二进制文件,在区分二进制文件和文本文件的系统上(如Windows)打开文件时,fopen()函数的mode参数要加上'b'。函数fread()的原型如下所示:

string fread(int handle,int length)         //读取打开的文件

该函数从文件指针资源handle中读取最多length个字节。在读取完length个字节数,或到达EOF时,或(对于网络流)当一个包可用时都会停止读取文件,就看先碰到哪种情况了。该函数返回读取的内容字符串,如果失败则返回FALSE。函数的使用代码如下所示:
<?php

//从文件中读取指定字节数的内容存入到一个变量中

$filename = "data.txt";

$handle = fopen($filename, 'r') or die("文件打开失败 ");

$contents = fread($handle, 100);         //从文件中读取100个字节

fclose($handle);         //关闭文件资源

echo $contents;          //将从文件中读取的内容输出

 

//从文件中读取全部内容到一个变量中,每次读取一部分,循环读取

$filename = "c:\\files\\somepic.gif";

$handle = fopen($filename, 'rb') or die("文件打开失败");     //以只读的方式,模式加了‘b'

$contents = "";

while(!feof($handle)){          //使用feof()判断文件结尾

$contents .=fread($handle, 1024);        //每次读取1024个字节

}

fclose($handle);       //关闭文件资源

echo $contents;         //将从文件中读取的全部内容输出

 

//另一种从文件中读取全部内容的方法

$filename = "data.txt";

$handle = fopen($filename, "r")or die("文件打开失败");

$contents = fread($handle, filesize($filename));        //使用fielsize()函数一起读出

fclose($handle);

echo $contents;

?>

如果你只是想将一个文件的内容读入到一个字符串中,可以用file_get_contents()函数,它的性能比上面的代码好得多。file_get_contents()函数是用来将文件的内容读入到一个字符串中的首选方法,如果操作系统支持,还会使用内存映射技术来增强性能。该函数的使用代码如下所示:

<?php

echo file_get_contents("data.txt"); //读取文本文件中的内容并输出

echo file_get_contents("c:\\files\\somepic.gif"); //读取二进制文件中的内容并输出

?>

②函数fgets()、fgetc()

fgets()该函数一次至多从打开的文件资源中读取一行内容。函数fgets()的原型如下所示:

string fgets(int handle[,int length])                             //从打开的文件中返回一行

第一个参数提供使用fopen()函数打开的资源。如果提供了第二个可选参数length,该函数返回length-1个字节。或者返回遇到换行或EOF之前读取的所有内容。如果忽略可选的length参数,默认为1024个字符。在大多数情况下,这意味着fgets()函数将读取到1024个字符前遇到换行符号,因此每次成功调用都会返回下一行。如果读取失败则返回FALSE。该函数的使用代码如下所示:
<?php

$handle = fopen("data.txt", "r") or die("文件打开失败 "); //以只读模式打开文件

while(!feof($handle)){

$buffer = fgets($handle,4096); //一次读取一行内容

echo $buffer."<br>"; //输出每一个航

}

fclose($handle);

?>

函数fgetc()在打开的文件资源中只读取当前指针位置处的一个字符。如果遇到文件结束标志EOF,则返回FALSE值。该函数的使用代码如下所示:

<?php

$fp = fopen('data.txt','r') or die("文件打开失败");

while(false !==($char = fgetc($fp))){

echo $char."<br>";

} 

?>

③函数file()

该函数非常有用,与file_get_contents()类似,不需要使用fopen()函数打开文件,不同的是file()函数可以把整个文件读入到一个数组中。数组中的每个元素对应文件中相应的行,各元素由换行符分割,同时换行符仍附加在每个元素的末尾。这样,就可以使用数组的相关函数对文件内容进行处理。该函数的使用代码如下所示:

<?php

//将文件test.txt中的内容读入到一个数组中,并输出

print_r(file(test.txt));

?>

④函数readfile()

该函数可以读取指定的整个文件,立即输出到输出缓冲区,并返回读取的字节数。该函数也不需要使用fopen()函数打开文件。在下面的示例中,轻松地将文件内容输出到浏览器。代码如下所示:

<?php

//直接将文件data.txt中的数据读出并输出到浏览器

readfile("data.txt");

?>
PHP 相关文章推荐
无限级别菜单的实现
Oct 09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
php discuz 主题表和回帖表的设计
Mar 13 PHP
PHP 存储文本换行实现方法
Jan 05 PHP
php 无法载入mysql扩展
Mar 12 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
详解PHP归并排序的实现
Oct 18 PHP
PHP读取大文件的几种方法介绍
Oct 27 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 #PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 #PHP
PHP文件锁函数flock()详细介绍
Nov 18 #PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 #PHP
PHP操作文件的一些基本函数使用示例
Nov 18 #PHP
一个经典的PHP文件上传类分享
Nov 18 #PHP
php数组查找函数总结
Nov 18 #PHP
You might like
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
PHP crc32()函数讲解
2019/02/14 PHP
JS与框架页的操作代码
2010/01/17 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
Django中信号signals的简单使用方法
2019/07/04 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
python 决策树算法的实现
2020/10/09 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
毕业生求职推荐信
2013/11/04 职场文书
超市中秋节活动方案
2014/02/12 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
详解Redis复制原理
2021/06/04 Redis
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB