1、 第六章(第六章(项目六项目六)文件操作学习指文件操作学习指导导 一、文件一、文件基本基本操作操作 文件基本操作主要包含获取文件属性、打开文件、读写文件、删除文件等操作。下面分别进行介绍 1文件属性文件属性 程序中有时需要使用文件的一些属性,如文件类型、文件大小、文件时间、文件权限等。PHP 提供了一些常用文件属性函数,能够根据给定的文件名得到文件的相关属性,这些函数的参数都是文件$file 类型。下面我简单进行说明 (1)filetype($file):返回文件$file 的类型。这些文件类型为 file(文件)、dir(目录)或 Unknown(未知)。(2)filesize($file)
2、:返回给定文件的大小,单位为字节。(3)filectime($file):返回文件创建时间的时间戳(一个整数),通常需格式化为日期时间进行显示。(4)fileatime($file):返回文件上次访问时间。(5)filemtime($file):返回文件上次修改时间。(6)is_writable($file):返回文件是否可写。(7)is_readable($file):返回文件是否可读。(8)stat($file):以数组形式返回文件的全部信息。例如使用文件属性函数查看文件的代码如下。?php$fn=”E:php5”;echo 文件类型:,filetype($fn);echo 文件创建时间:
3、;echo date(“Y-m-d G:i:s”,filectime($fn),;$fn=”E:php5php.ini”;Echo$fn,;If(is_readable($fn)echo 文件可读;else echo 文件不可读;If(is_writable($fn)echo 文件可写;else echo 文件不可写;echo 文件类型:,filetype($fn);echo 文件大小:,filesize($fn).字节;这段代码中,第 2 行给出了一个文件目录的字符串,代表的是 E 盘 php5 目录或文件夹,第 3 行使用 filetype 函数获取其类型信息,结果显示应该为“dir”,第
4、 5 行用到了 filectime函数,获取这个目录或文件夹的建立时间并用 date 函数进行格式化输出。第 6 行给出了一个文件路径字符串,代表的是 E 盘 php5 文件夹下的 php.ini 文件,第 8 行的 if 语句条件中使用了 is_readable 函数判断给出的 php.ini 文件是否可读并进行显示,第 9 行的 if 语句条件中使用了 is_writable 函数判断这个文件是否可写并进行显示,第 10 行使用了 filetype 函数判断文件类型,显示为 file,最后一行使用了 filesize 函数计算文件的大小,以字节为单位。程序的运行结果如图所示。2文件的打开和
5、关闭文件的打开和关闭 在读写文件时,通常需要先打开文件。fopen()函数用于打开文件,返回指向打开文件的文件指针,其基本格式如下:$handle=fopen($fname,$mode);其中,$handle 变量保存返回的文件指针,其数据类型为资源类型 resource。第一个参数 fname 为文件名,可以是本地文件,也可以是远程文件的 URL。第二个参数 mode为文件打开模式,指定文件读写方式。可使用下列文件打开模式。(1)r:只读方式打开,将文件指针指向文件头。(2)r+:读写方式打开,将文件指针指向文件头。(3)w:只写入方式打开,将文件指针指向文件头,注意,文件原有内容被删除。若
6、文件不存在,则用指定文件名创建文件再打开。(4)w+:读写方式打开,其他行为与 w 相同。(5)a:只写入方式打开,将文件指针指向文件末尾,始终在文件末尾写入数据。若文件不存在,则用指定文件名创建文件再打开。(6)a+:读写方式打开,其他行为与 a 相同。(7)x:创建新文件并以只写入方式打开,将文件指针指向文件头。(8)x+:创建新文件并以读写方式打开,其他行为与 x 相同。(9)c:只写入方式打开,将文件指针指向文件头,文件原有内容保留。若文件不存在,则用指定文件名创建文件再打开。(10)c+:读写方式打开,其他行为与 c 相同。要注意的是,文件读写都在文件指针位置进行,读出或写入 n 个
7、字节时,文件指针向后移动 n 个字节。另外,fopen()函数中指定的文件如果没有指定路径,则默认和当前 PHP 文件路径相同 文件使用结束后,应及时使用 fclose()函数将其关闭。fclose()函数基本格式为 fclose($handle);其中,$handle 为已打开的文件指针。我们来看下面的这两行代码:$handle=fopen(d:tempdata.txt,W);fclose($handle);将 D 盘上的 temp 文件夹下的文件 data.txt 以 W 方式也就是只写入方式打开,然后关闭。3向文件写入数据向文件写入数据 fwrite()函数用于向文件写入数据,其基本格式
8、如下:fwrite($handle,$data,$len);其中,$handle 为打开的文件指针,$data 为要写入的字符串。$len 指定写入的字符串长度,若$data 长度超过$len,多余的字符不会被写入文件。$len 可以省略,省略时$data 全部写入文件。fwrite()函数返回写入的字符数,写入出错则返回 FALSE。注意,对于数组和对象等复杂类型的数据,需要使用 serialize()函数进行序列化转换之后才能使用 fwrite()函数写入文件。因为在PHP中直接写文件内容的情况并不多,我这里不进行实例介绍了,请同学们参考相关例题,理解 fwrite()函数的使用.二、读取
9、文件二、读取文件数据数据 1.读取文件的 3 个函数 读取文件数据主要有 3 个函数,如图所示.这些函数的参数均为文件指针,用于读取指定文件中当前指针位置的一个字符或一行字符.其中 fgetc($handle)函数读一个字符。fgets($handle,$len):有两个参数,当省略第 2 个参数$len 时,读一行字符。若指定了长度$len,行中的字符数大于$len 则读$len 个字符,否则读完行中字符就停止。fgetss($handle,$len,$tags):与 fgets()类似。区别在于 fgetss()会删除读出字符串中的HTML 和 PHP 标记。可用第 3 个参数$tags
10、指定需要保留的标记。例如,我们来看这一段读文件数据的代码:?php$fname=test3_data.txt;$mode=r;$handle=fopen($fname,$mode);echo fgetc($handle);/读一个字符 echo;echo fgets($handle);/读一行 echo;echo fgets($handle);/读一行 echo;echo fgetss($handle);/读一行,删除 HTML 标记 echo;echo fgetss($handle,255,);/已知行中字符少于 255,所以可读一行,保留 echo;fclose($handle);echo
11、 文件操作结束;第 4 行以只读方式打开了文件 test3_data.txt,第 5 行使用 fgetc 函数读取文件中的第一个字符并显示,第 7 行和第 9 行代码使用 gets 函数读取文件中当前位置的一行数据,第 11 行代码使用 fgetss 函数读当前的一行数据但删除 HTML 标记,第 13 行代码使用 fgetss 函数读一行,但保留标记,因为已知行中字符数少于 255,所以可以读整行数据。最后关闭文件结束操作。如果 test3_data.txt 文件数据如下:上面程序代码在 IE 浏览器中的显示结果如图所示。2读 CSV 文件 CSV 文件指文件中的数据用分隔符(分号、逗号)等
12、分隔。可用 fgetcsv()函数读取CSV 文件,并解析数据,其基本格式为$a=fgetcsv($handle,$len,$csv);与 fgets()函数类似,fgetcsv()函数从$handle 指定的文件中读取一行或$len 指定数量的字符($len 为 0 也表示读一行)。读出的字符串按指定的分隔符分解为数组返回。3读整个文件内容 file()函数可以不需要使用 fopen()函数打开文件,即可将读出文件的全部内容放入一个数组,文件每行数据为一个数组元素值。file_get_contents()函数可将文件内容读入一个字符串。例如下面代码将文件内容读入数组。?php$a=file(
13、test5_data.txt);echo file(test5_data.txt)读出的文件内容如下:;foreach($a as$value)echo$value,;$a=file_get_contents(test5_data.txt);echo file_get_contents(test5_data.txt)读出的文件内容如下:;echo$a;echo 处理回车换行后的文件内容:,nl2br($a);程序中第 4 行至第 6 行,使用 foreach 循环读取文件 test5_data.txt 中的数据行并显示;第 7 行使用 file_get_contents 函数读取 test5_
14、data.txt 文件中的数据存入数组 a 中,后面语句显示读出的数组内容。如果 test5_data.txt 文件内容如下:代码在 IE 浏览器中的显示结果如图所示。要注意的是 file_get_contents()函数读出的字符串中包含了 回车 符号,但回车符号在浏览器中被忽略,不会显示换行效果,要显示换行效果,需使用 nl2br()函数进行处理。4其他文件操作 其他常用的文件操作函数包括测试文件是否存在,文件复制 文件改名等。file_exists($filename):file_exists 函数用于测试参数中指定的文件 filename 是否存在,文件存在返回 TRUE,否则返回 F
15、ALSE。copy($filename,$filename2):copy 函数将给定的第一个参数$filename 文件复制为文件 filename2。操作成功返回 TRUE,否则返回 FALSE。rename($filename,$filename2):rename 函数将文件$filename名称修改为$filename2。操作成功返回 TRUE,否则返回 FALSE。unlink($filename):删除指定文件,操作成功返回 TRUE,否则返回 FALSE。这些函数的使用请参看教材上的例题,我在这里不进行详细的介绍.三、目录操作三、目录操作 目录操作主要包括解析目录、遍历目录、创建目
16、录和删除目录等操作。1解析目录 解析目录也称为目录解析,其中三个函数用于获取一个给定路径中的完整路径、文件主名和扩展名等信息,这三个函数如图所示。basename($path):basename函数返回由参数$path指定路径的文件名(含扩展名)。dirname($path):dirname 函数返回由参数$path 路径中指定的文件的完整路径,即文件名中除去 basename()函数获取的部分。pathinfo($path):pathinfo 函数以数组形式返回文件名中的路径名、文件主名和扩展名。例如一段解析目录的代码如下。?php$path=”G:phpcdchapter6test6.php”;echo“path=$pathbasename($path)=”;echo basename($path);echo;echo“dirname($path)=”;echo dirname($path);echo;foreach(pathinfo($path)as$key=$value)echo“pathinfo$key=$value”;代码中第 4 行使用 basename 函数返回参数 p