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 和 MYSQL
Oct 09 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
php自定义加密与解密程序实例
Dec 31 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
PHP加密解密类实例代码
Jul 20 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
基于mysql的论坛(4)
2006/10/09 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
Angular的$http与$location
2016/12/26 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
Django重设Admin密码过程解析
2020/02/10 Python
python绘制动态曲线教程
2020/02/24 Python
python 操作excel表格的方法
2020/12/05 Python
后勤工作职责
2013/12/22 职场文书
运动会开幕式解说词
2014/02/05 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
2014司机年终工作总结
2014/12/05 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js