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

吾爱主题 阅读:119 2021-10-21 12:43:00 评论:0

前言

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

文件打开与关闭

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

1、打开文件

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

?
1 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()函数关闭文件,该函数的语法如下:

?
1 bool fclose ( resource handle ) ;

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

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

读写文件

1.从文件中读取数据

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

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

(1)readfile()函数

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

?
1 int readfile(string filename)

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

(2)file()函数

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

?
1 array file(string filename)

(3)file_get_contents()函数

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

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

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

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 <!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>

效果:

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

(1)fgets()函数

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

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

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

(2)fgetss()函数

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

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

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

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

fun.php:

?
1 2 3 4 5 6 7 8 9 10 <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:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 <!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>

效果:

读取一个字符:fgetc()

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

?
1 string fgetc ( resource handle )

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

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

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

?
1 string fread ( int handle, int length )

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

2.将数据写入文件

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

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

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

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

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

?
1 2 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()函数写入数据。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <!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内置了大量的文件操作函数。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 - 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文件打开关闭及读写内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/hai_qing_xu_kong/article/details/52294237

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容