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 相关文章推荐
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
Aug 18 PHP
php使用cookie实现记住登录状态
Apr 27 PHP
非常重要的php正则表达式详解
Jan 04 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
关于php开启错误提示的总结
Sep 24 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 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
PHP时间格式控制符对照表分享
2013/07/23 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
详解jQuery事件
2017/01/13 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
python机器学习之随机森林(七)
2018/03/26 Python
Django models.py应用实现过程详解
2019/07/29 Python
python的命名规则知识点总结
2019/10/04 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
2020/01/10 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
这段代码难道不该打印出56吗
2013/02/27 面试题
销售岗位职责范本
2014/06/12 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
项目合作协议书
2014/09/23 职场文书
教师求职自荐信范文
2015/03/04 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
Python 绘制多因子柱状图
2022/05/11 Python