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 相关文章推荐
用PHP+java实现自动新闻滚动窗口
Oct 09 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
检查php文件中是否含有bom的函数
May 31 PHP
探讨PHP使用eAccelerator的API开发详解
Jun 09 PHP
PHP判断是否有Get参数的方法
May 05 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 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
php一个找二层目录的小东东
2012/08/02 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
javascript 闭包疑问
2010/12/30 Javascript
关于JS字符串函数String.replace()
2013/04/07 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
Python运算符重载用法实例分析
2015/06/01 Python
django之常用命令详解
2016/06/30 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
python logging 日志的级别调整方式
2020/02/21 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
python实现控制台输出颜色
2021/03/02 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
关于热爱祖国的演讲稿
2014/05/04 职场文书
临床专业自荐信
2014/06/22 职场文书
个人租房协议书
2014/11/28 职场文书
保送生自荐信范文
2015/03/26 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
JavaScript实现优先级队列
2021/12/06 Javascript
Vue全局事件总线你了解吗
2022/02/24 Vue.js