PHP学习笔记-文件操作1

转载请标明出处:

http://blog.csdn.net/hai_qing_xu_kong/article/details/52294237

本文出自:【顾林海的博客】

前言

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>

效果:

读取一行数据: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>

效果:

读取一个字符: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内置了大量的文件操作函数。

 - 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>";
 }
时间: 2024-10-16 16:25:35

PHP学习笔记-文件操作1的相关文章

&lt;学习笔记&gt;文件操作篇

文件操作用到的函数: #include <stdio.h> fopen(FILE* fp): 文件打开函数: 1.打开成功返回当前文件所处的地址值:2.打开失败返回一个空指针"NULL"; 常用方法:if((fp=fopen("file_name","mode"))==NULL)printf("can not open this file!");常用此方法打开文件. mode代表含义: r 为读打开一个文本文件,若

erlang学习笔记(文件操作)

参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)

python学习笔记文件操作(六)

1.文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 如下文件: 2017-03-24 11:25:06:349 - info: [debug] [AndroidBootstrap] Sending command to android: {"cmd":"shutdown"} 2017-03-24 11:25:06:355 - info: [debug] [AndroidBootstrap] Received command 

Python3.5学习笔记-文件操作

在Python中,操作文件对象使用open函数来创建,下表列出了常用的操作file的函数: 序号 方法及描述 1.file.close() 关闭文件.关闭后文件不能再进行读写操作. 2.file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入. 3.file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上. 4.file.isatty() 如果文件

Python学习笔记——文件操作

python中,一切皆对象.   一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建. open函数常用的三个参数:文件路径/名称.模式.encoding. 1 f = open('测试文件','r',encoding='utf-8') 2 print(f.read()) 3 f.close() 二.open函数中模式参数的常用值 值 描述 'r' 读模式 'w' 写模式 'a'

iOS学习笔记——文件操作(NSFileManager)

iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.               上面的完整路径为:用户->资源库->Application Support->iPhone Simulator->

EasyARM i.mx28学习笔记——文件IO方式操作GPIO

0 前言 本文描述如果通过文件IO sysfs方式控制EasyARM GPIO端口.通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入. Linux学习可从应用出发,先不纠结Linux驱动编写,先把Linux给玩起来. [相关博文] [EasyARM

Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习

一.URI 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频片段等都可以用Uri来表示. URI一般由三部分组成: 访问资源的命名机制. 存放资源的主机名. 资源自身的名称,由路径表示. Android的Uri由以下三部分组成: "content://".数据的路径.标示ID(可选) 举些例子,如: 所有联系人的Uri: content://con

memcached学习笔记5--socke操作memcached 缓存系统

使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen()套接字连接memcached 同样执行CRUD require_once(CLASS_PATH.'memcached-client.php');//CLASS_PATH 是我定义的类文件文件夹路径 $mc = new memcached( array( 'servers' => array( '1