PHP文件打开关闭及读写操作示例解析


Posted in PHP onAugust 06, 2020

前言

PHP支持文件上传功能,因此学习PHP文件的相关操作是必须的,这篇笔记会去记录PHP文件系统的相关知识。

文件打开与关闭

文件处理包括读取、关闭、重写等,例如,访问一个文件需要3步:打开文件、读写文件和关闭文件。其他的操作要么是包含在读写文件中(如显示内容、写入内容等),要么与文件自身的属性有关系(如文件遍历、文件改名等)。

1、打开文件

在PHP中使用fopen()函数打开文件,fopen()函数的语法如下:

resource fopen ( string filename, string mode [, bool use_include_path]);
  • filename是要打开的包含路径的文件名,可以是相对路径,也可以是绝对路径。如果没有任何前缀则表示打开的是本地文件。
  • mode是打开文件的方式,可取的值如下表所示。
  • use_include_path是可选的,该参数在配置文件php.ini中指定一个路径,如F:\AppServ\ www\mess.php,如果希望服务器在这个路径下打开所指定的文件,可以设置为1或 true。

mode 模式名称 说明
r 只读 读模式—进行读取,文件指针位于文件的开头
r+ 读写 读写模式—进行读写,文件指针位于文件的开头。在现有文件内容的末尾之前进行写入就会覆盖原有的内容
w 只写 写模式—进行写入文件,文件指针指向头文件。如果该文件存在,则所有文件内容被删除,否则函数将创建这个文件
w+ 读写 读写模式—进行读写,文件指针指向头文件。如果该文件存在,则所有文件的内容被删除;否则函数将创建这个文件
x 谨慎写 写模式打开文件,从文件头开始写。如果文件已经存在,则该文件将不会被打开,函数返回false,PHP将产生一个警告
x+ 谨慎写 读/写模式打开文件,从文件头开始写。如果该文件存在,则该文件将不会被打开,函数返回false,PHP将产生一个警告
a 追加 追加模式打开文件,文件指针指向尾文件。如果该文件已有内容,则将从内容末尾开始追加;如果文件不存在,则函数创建这个文件
a+ 追加 追加模式打开文件,文件指针指向头文件。如果该文件已有内容,则从文件末尾开始追加或者读取;如果文件不存在,则函数将创建这个文件
b 二进制 二进制模式—用于与其他模式进行连接。如果文件系统能够区分二进制文件和文本文件,可能会使用它。Windows可以区分;UNIX则不区分。推荐使用这个选项,便于获得最大程度的可移植性。它是默认模式
t 文本 用于其他模式的结合。这个模式只是Windows下的一个选择

2、关闭文件

对文件的操作结束后应该关闭这个文件,否则可能引起错误。在PHP中使用fclose()函数关闭文件,该函数的语法如下:

bool fclose ( resource handle ) ;

该函数将参数handle指向的文件关闭,如果成功,返回true,否则返回false。其中的文件指针必须是有效的,并且是通过fopen()函数成功打开的文件。例如:

<?php
  $f_open =fopen("../file.txt.","rb");   //打开文件
  …  //对文件进行操作
  fclose($f_open)   //操作完成后关闭文件        
?>

读写文件

1.从文件中读取数据

从文件中读取数据,可以读取一个字符、一行字串或整个文件,还可以读取任意长度的字串。

读取整个文件:readfile()、file()和file_get_contents()。

(1)readfile()函数

readfile()函数用于读入一个文件并将其写入到输出缓冲,如果出现错误则返回false。函数语法 如下:

int readfile(string filename)

使用readfile()函数,不需要打开/关闭文件,不需要echo/print等输出语句,直接写出文件路径即可。

(2)file()函数

file()函数也可以读取整个文件的内容,只是file()函数将文件内容按行存放到数组中,包括换行符在内。如果失败则返回false。函数语法如下:

array file(string filename)

(3)file_get_contents()函数

该函数将文件内容(filename)读入一个字符串。如果有offset和maxlen参数,将在参数offset所指定的位置开始读取长度为maxlen的内容。如果失败,返回false。函数语法如下:

string file_get_contents(string filename[,int offset[,int maxlen]])

该函数适用于二进制对象,是将整个文件的内容读入到一个字符串中的首选方式。

示例:
使用readfile()函数、file()函数和file_get_contents()函数分别读取tm.txt的内容。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>读取整个文件</title>
<style type="text/css">
<!--
body,td,th {
  font-size: 12px;
}
body {
  margin-left: 10px;
  margin-top: 10px;
  margin-right: 10px;
  margin-bottom: 10px;
}
-->
</style></head>
<body>
<table border="1" cellspacing="0" cellpadding="0">
 <tr>
  <td width="280" height="25" align="right" valign="middle" scope="col">使用readfile()函数读取文件内容:</td>
  <td height="25" align="center" valign="middle" scope="col">
  <?php readfile('tm.txt'); ?>  </td>
 </tr>
 <tr>
  <td height="25" align="right" valign="middle">使用file()函数读取文件内容:</td>
  <td height="25" align="center" valign="middle">
  <?php
    $f_arr = file('tm.txt');
    foreach($f_arr as $cont){
      echo $cont."<br>";
    }
  ?></td>
 </tr>
 <tr>
  <td width="280" height="25" align="right" valign="middle" scope="col">使用file_get_contents()函数读取文件内容:</td>
  <td height="25" align="center" valign="middle" scope="col">
  <?php

    $f_chr = file_get_contents('tm.txt');
    echo $f_chr;

  ?></td>
 </tr>
</table>
</body>
</html>

效果:

PHP文件打开关闭及读写操作示例解析

读取一行数据:fgets()和fgetss()

(1)fgets()函数

fgets()函数用于一次读取一行数据。函数语法如下:

string fgets( int handle [, int length] )
  • handle是被打开的文件
  • length是要读取的数据长度。

函数能够实现从handle指定文件中读取一行并返回长度最大值为
length-1个字节的字符串。在遇到换行符、EOF或者读取了length-1个字节后停止。如果忽略length参数,那么读取数据直到行结束。

(2)fgetss()函数

fgetss()函数是fgets()函数的变体,用于读取一行数据,同时,
fgetss()函数会过滤掉被读取内容中的html和php标记。函数语法如下:

string fgetss ( resource handle [, int length [, string 
allowable_tags]] )

该函数能够从读取的文件中过滤掉任何html和php标记。可以使用
allowable_tags参数来控制哪些标记不被过滤掉。

示例:使用fgets()函数与fgetss()函数分别读取fun.php文件并显示出来。

fun.php:

<table width="200" border="0" cellspacing="0" cellpadding="0">
 <tr>
  <td height="20" align="center" valign="middle" scope="col"><font color='red'>I am red.</font></td>
  <td height="20" align="center" valign="middle" scope="col"><font color='green'>I am green.</font></td>
 </tr>
 <tr>
  <td height="20" align="center" valign="middle"><font color='black'>I am black.</font></td>
  <td height="20" align="center" valign="middle"><font color='pink'>I am pink. </font></td>
 </tr>
</table>

index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>fgets和fgetss的区别</title>
<style type="text/css">
<!--
body,td,th {
  font-size: 12px;
}
body {
  margin-left: 10px;
  margin-top: 10px;
  margin-right: 10px;
  margin-bottom: 10px;
}
-->
</style></head>
<body>
<div align="left"></div>
<table border="1" cellspacing="0" cellpadding="0">
 <tr>
  <td height="30" align="right" valign="middle" scope="col">使用fgets函数:</td>
  <td height="30" align="center" valign="middle" scope="col">
<?php
  header("Content-Type:text/html;charset=utf-8");
  $fopen = fopen('fun.php','rb');
  while(!feof($fopen)){
    echo fgets($fopen);
  }
  fclose($fopen);
?> </td>
 </tr>
 <tr>
  <td height="30" align="right" valign="middle">使用fgetss函数:</td>
  <td height="30" align="center" valign="middle">
  <?php
  $fopen = fopen('fun.php','rb');
  while(!feof($fopen)){
    echo fgetss($fopen);
  }
  fclose($fopen);
?> </td>
 </tr>
</table>
</body>
</html>

效果:

PHP文件打开关闭及读写操作示例解析

读取一个字符:fgetc()

在对某一个字符进行查找、替换时,需要有针对性地对某个字符进行读取,在PHP中可以使用fgetc()函数实现此功能。函数语法如下:

string fgetc ( resource handle )

该函数返回一个字符,该字符从handle指向的文件中得到。遇到EOF则返回false。

读取任意长度的字串:fread()

fread()可以从文件中读取指定长度的数据,函数语法如下:

string fread ( int handle, int length )

参数handle为指向的文件资源,length是要读取的字节数。当 函数读取length个字节或到达EOF时停止执行。

2.将数据写入文件

写入数据也是PHP中常用的文件操作,在PHP中使用fwrite()和file_put_contents()函数向文件中写入数据。

fwrite()函数也称为fputs(),它们的用法相同。fwrite()函数的语法如下:

int fwrite ( resource handle, string string [, int length] )

该函数把内容string写入文件指针handle处。如果指定了长度length,则写入length个字节后停止。如果文件内容长度小于length,则会输出全部文件内容。

file_put_contents()函数是PHP 5新增的函数,其语法为:

int file_put_contents ( string filename, string data [, int 
flags])

filename为写入数据的文件。data为要写入的数据。flags可以是FILE_USE_INCLUDE_PATH、FILE_APPEND或LOCK_EX,LOCK_EX为独占锁定。

使用file_put_contents()函数和依次调用fopen()、fwrite()、 fclose()函数的功能一样。

示例:使用fwrite函数向文件中写入数据,再使用 file_put_contents()函数写入数据。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>使用fwrite和file_put_contents函数写入数据</title>
<style type="text/css">
<!--
body,td,th {
  font-size: 12px;
}
body {
  margin-left: 10px;
  margin-top: 10px;
  margin-right: 10px;
  margin-bottom: 10px;
}
-->
</style></head>
<body>
<?php
header("Content-Type:text/html;charset=utf-8");
  $filepath = "05.txt";
  $str = "此情可待成追忆  只是当时已惘然<br>";
  echo "用fwrite函数写入文件:";
  $fopen = fopen($filepath,'wb') or die('文件不存在');
  fwrite($fopen,$str);
  fclose($fopen);
  readfile($filepath);
  echo "<p>用file_put_contents函数写入文件:";
  file_put_contents($filepath,$str);
  readfile($filepath);
?>
</body>
</html>

效果:

PHP文件打开关闭及读写操作示例解析

除了可以对文件内容进行读写,对文件本身同样也可以进行操作,如复制、重命名、查看修改日期等。PHP内置了大量的文件操作函数。

- bool copy( string path1, string path2):将文件从path1复制到path2。如果成功,返回true,失败则返回false。例如:copy('tm.txt','../tm.txt')


 - bool unlink( string filename )删除文件,成功返回true,失败则返回False。例如:unlink(‘./tm.txt')


 - int fileatime( string filename )返回文件最后一次被访问的时间,时间以UNIX时间戳的方式返回。例如:fileatime('1.txt')


 - int filemtime( string filename )返回文件最后一次被修改的时间,时间以UNIX时间戳的方式返回。例如:date('Y-m-dH:i:s',filemtime('1.txt'))


 - int filesize( string filename )取得文件filename的大(bytes)。例如:filesize('1.txt')


 - array pathinfo(string name [, int options])返回一个数组,包含文件name的路径信息。有dirname、basename和extension。可以通过option设置要返回的信息,有PATHINFO_DIRNAME、PATHINFO_BASENAME和PATHINFO_EXTENSION。
默认为返回全部。例如:
$arr =pathinfo('/tm/sl/12/5/1.txt');
foreach($arras$method=>$value{
  echo$method.“:”.$value.“<br>”;
}



 - string realpath ( string filename )返回文件filename的绝对路径。如c:\tmp\…\1.txtrealpath('1.txt')


 - array stat ( string filename )返回一个数组,包括文件的相关信息,如上面提到的文件大小、最后修改时间等
 $arr = stat('1.txt');
 foreach($arr as $method => $value){
   echo $method.": ".$value."<br>";
 }

到此这篇关于PHP文件打开关闭及读写操作示例解析的文章就介绍到这了,更多相关PHP文件打开关闭及读写内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
认识并使用PHP超级全局变量
Jan 26 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
PHP遍历数组的三种方法及效率对比分析
Feb 12 PHP
php计算函数执行时间的方法
Mar 20 PHP
PHP读取文件内容的五种方式
Dec 28 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
Jan 07 PHP
Symfony2 session用法实例分析
Feb 04 PHP
PHP数组实例详解
Jun 26 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
May 24 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 06 #PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 #PHP
PHP与Web页面的交互示例详解二
Aug 04 #PHP
PHP与Web页面的交互示例详解一
Aug 04 #PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 #PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 #PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 03 #PHP
You might like
PHP中的加密功能
2006/10/09 PHP
pw的一个放后门的方法分析
2007/10/08 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Django验证码的生成与使用示例
2017/05/20 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
python实现弹窗祝福效果
2019/04/07 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Python-for循环的内部机制
2020/06/12 Python
详解python内置模块urllib
2020/09/09 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
MySQL面试题
2014/01/12 面试题
心理健康教育心得体会
2013/12/29 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
文艺晚会开场白
2015/05/29 职场文书
婚宴主持词
2015/06/30 职场文书
消费者理赔投诉书
2015/07/02 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书