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线性表顺序存储实现代码(增删查改)
Feb 16 PHP
解析Extjs与php数据交互(增删查改)
Jun 25 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
WordPress开发中用于标题显示的相关函数使用解析
Jan 07 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
PHP读取Excel类文件
May 15 PHP
PHP实现权限管理功能示例
Sep 22 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 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+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
PHP加密解密类实例代码
2016/07/20 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
js加解密 脚本解密
2008/02/22 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
vue子父组件通信的实现代码
2017/07/09 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
python输出指定月份日历的方法
2015/04/23 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
python3实现高效的端口扫描
2019/08/31 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
大学团支书的自我评价分享
2013/12/14 职场文书
大学生自我鉴定
2013/12/16 职场文书
小学生开学感言
2014/02/28 职场文书
专科生就业求职信
2014/06/22 职场文书
单身申明具结书
2015/02/26 职场文书
银行自荐信范文
2015/03/25 职场文书
实习感想范文
2015/08/10 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python