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 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
Get或Post提交值的非法数据处理
Oct 09 PHP
3种平台下安装php4经验点滴
Oct 09 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
PHP的加密方式及原理
Jun 14 PHP
深入分析php之面向对象
May 15 PHP
php类常量的使用详解
Jun 08 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
php统计数组元素个数的方法
2015/07/02 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
详解python开发环境搭建
2016/12/16 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
HTML的form表单和django的form表单
2019/07/25 Python
Pytorch之保存读取模型实例
2019/12/30 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
聊聊python中的循环遍历
2020/09/07 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
幼儿园教师国培感言
2014/02/02 职场文书
小学教师师德反思
2014/02/03 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技
Sql Server之数据类型详解
2022/02/28 SQL Server
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python