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实现文件上传二法
Oct 09 PHP
汉字转化为拼音(php版)
Oct 09 PHP
joomla内置的表单验证功能使用方法
Jun 11 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
php切割页面div内容的实现代码分享
Jul 31 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
php绘制一个矩形的方法
Jan 24 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
php组合排序简单实现方法
Oct 15 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
php 数据结构之链表队列
Oct 17 PHP
一次因composer错误使用引发的问题与解决
Mar 06 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实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
自定义百度分享的分享按钮
2015/03/18 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
让python json encode datetime类型
2010/12/28 Python
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python入门篇之条件、循环
2014/10/17 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
基于python生成器封装的协程类
2019/03/20 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
python安装后的目录在哪里
2020/06/21 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
娱乐节目策划方案
2014/06/10 职场文书
多媒体教室标语
2014/06/26 职场文书
中层干部考核评语
2015/01/04 职场文书
市场总监岗位职责
2015/02/11 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js