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
粗略计算在线时间,bug:ip相同
Dec 09 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 PHP
PHP实现文件上传功能实例代码
May 18 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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 cookie的操作实现代码(登录)
2010/12/29 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
PHP实现验证码校验功能
2017/11/16 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
JS Date函数整理方便使用
2013/10/23 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
Python contextlib模块使用示例
2015/02/18 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python 线程池用法简单示例
2019/10/02 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
京剧自荐信
2014/01/26 职场文书
大学生社团活动总结
2014/04/26 职场文书
垃圾桶标语
2014/06/24 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
Python基础之进程详解
2021/05/21 Python
Redis 限流器
2022/05/15 Redis