您好,欢迎访问三七文档
文件系统处理一、文件的基本操作一、打开关闭文件:在处理文件内容之前,通常需要建立与文件资源的连接,即打开文件。所谓打开文件,实际上是建立文件的各种有关的信息,并使文件指针指向该文件,就可以将发起输入或输出流的实体联系在一起,以便进行其他操作。结束该资源的操作之后,应当关闭连接资源。关闭资源则断开指针与文件之间的联系,也就禁止再对该文件进行操作。1、fopen:打开文件或者URL格式:resourcefopen(string$filename,string$mode[,bool$use_include_path[,resource$zcontext]])说明:$filename:被打开文件的URL,可以是绝对路径、相对路径或者网络资源中的文件。$mode:文件模式,即指定了所要求到该流的访问类型。注:上面的指令是操作具有什么属性的文件。r和r+都是要读文件,但是r是打开(并读)具有读属性的文件。r+是打开(并读)具有读写属性(该文件可读、可写)的文件。w和w+都是要写文件,但是w是打开(并写)具有写属性的文件。w+是打开(并写)具有读写(可读可写)属性的文件。什么方式打开:指该文件具有什么属性。r+具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容;w+具有读写属性,写的时候如果文件存在,会被清空,从头开始写。r打开只读文件,该文件必须存在。r+打开可读写的文件,该文件必须存在。w打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。如果fopen()成功打开一个文件,该函数将返回一个指向这个文件的文件指针。对该文件进行操作所使用的读、写以及其他的文件操作,都需要使用这个资源来访问该文件。打开文件失败,则返回false。注:不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于Unix的系统使用\n作为行结束字符,基于Windows的系统使用\r\n作为行结束字符,基于Macintosh的系统使用\r作为行结束字符。如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。Windows下提供了一个文本转换标记('t')可以透明地将\n转换为\r\n。与此对应还可以使用'b'来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用'b'或者用't'作为mode参数的最后一个字符。如果是操作纯文本文件并在脚本中使用了\n作为行结束符,但还要期望这些文件可以被其它应用程序例如Notepad读取,则在mode中使用't'。在所有其它情况下使用'b'。在操作二进制文件时如果没有指定'b'标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于\r\n字符的奇怪问题。在windows系统中使用行结束符有两个选择:一是使用文本转换标记't'进行转换,一是使用'b'设置mode参数的模式为二进制。示例:注:在windows系统中,/代表的根目录是到盘符,比如下面相当于:D:\home\file.txt其他系统可能不同。运行结果:成功后返回资源型标识2、fclose:关闭一个已打开的文件指针语法:boolfclose(resource$handle)说明:将handle指向的文件关闭。成功时返回TRUE,或者在失败时返回FALSE.文件指针必须有效,并且是通过fopen()或fsockopen()成功打开的。示例:结果:注:单纯输出连接标识$handle01,似乎还在。二、读取文件可以将PHP提供的文件读取函数分为4类:读取一个字符(fgetc())、读取一行字符(fgets())、读取任意长度的字串(fread())、读取整个文件(readfile()、file()、file_get_contents())说明:在读取文件时,不仅要注意行结束符号“\n”,程序也需要一种标准的方式来识别何时到达文件末尾,这个标准通常称为EOF(EndOfFile)。在PHP中,使用feof()函数。该函数接受一个打开的文件资源,判断一个文件指针是否位于文件的结束处,如果在文件末尾处,则返回TRUE。1、fgetc():从文件指针中读取字符语法:stringfgetc(resource$handle)说明:返回一个包含有一个字符的字符串,该字符从handle指向的文件中得到。碰到EOF则返回FALSE(使用!==或者===可以进行文件是否到达末尾的判断)。•示例:结果:返回第一个字符,并且指针会向下走一个,下次再输出时,会是下一个字符echofgetc($fp);2、fgets:从文件指针中读取一行格式:stringfgets(int$handle[,int$length])说明:从handle指向的文件中读取一行并返回长度最多为length-1字节(第二个参数的单位是字节)的字符串。碰到换行符(包括在返回值中)、EOF或者已经读取了length-1字节后停止(看先碰到那一种情况)。如果没有指定length,则默认为1K,或者说1024字节。出错时返回FALSE。另:fgetss:从文件指针中读取一行并过滤掉HTML标记。示例:结果:3、fread:读取文件(可安全用于二进制文件)语法:stringfread(int$handle,int$length)说明:fread()从文件指针handle读取最多length个字节。该函数在读取完最多length个字节数,或到达EOF的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了8192个字节时就会停止读取文件,视乎先碰到哪种情况。返回所读取的字符串,如果出错返回FALSE。示例:4、readfile:输出一个文件intreadfile(string$filename[,bool$use_include_path[,resource$context]])说明:读入一个文件并写入到输出缓冲。返回从文件中读入的字节数。如果出错返回FALSE并且除非是以@readfile()形式调用,否则会显示错误信息。5、file:把整个文件读入一个数组中语法:arrayfile(string$filename[,int$use_include_path[,resource$context]])说明:和file_get_contents()一样,只除了file()将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内(数组中一个元素存储一行)。如果失败file()返回FALSE。示例:6、file_get_contents:将整个文件读入一个字符串【从网页中读取(抓取)文件内容,转变成字符串使用该函数】语法:stringfile_get_contents(string$filename[,bool$use_include_path[,resource$context[,int$offset[,int$maxlen]]]])说明:和file()一样,只除了file_get_contents()把文件读入一个字符串。将在参数offset所指定的位置开始读取长度为maxlen的内容。如果失败,file_get_contents()将返回FALSE。file_get_contents()函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。Note:如果要打开有特殊字符的URL(比如说有空格),就需要使用urlencode()进行URL编码。file和file_get_contents可以不适用fopen打开。三、写入文件1、fwrite:写入文件(可安全用于二进制文件)语法:intfwrite(resource$handle,string$string[,int$length])说明:fwrite()把string的内容写入文件指针handle处。如果指定了length,当写入了length个字节或者写完了string以后,写入就会停止,视乎先碰到哪种情况。fwrite()返回写入的字符数,出现错误时则返回FALSE。2、file_put_contents:将一个字符串写入文件语法:intfile_put_contents(string$filename,string$data[,int$flags[,resource$context]])说明:和依次调用fopen(),fwrite()以及fclose()功能一样。参数data可以是数组(但不能为多维数组),这就相当于file_put_contents($filename,join('',$array))示例:注:fwrite和file_put_contents:前者必须使用fopen、fwrite和fclose一起使用,后者直接使用该函数即可完成。注意:如果一个函数需要使用fopen函数的资源型的句柄时则必须使用fopen函数,如果不需要使用句柄,则不需要使用fopen,比如file_get_contens()和file_put_contents()四、目录操作(一)解析目录(1)basename():返回路径中的文件名部分语法:stringbasename(string$path[,string$suffix])说明:给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。如果文件名是以suffix结束的,那这一部分也会被去掉。在Windows中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。(2)dirname:返回路径中的目录部分语法:stringdirname(string$path)说明:给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。在Windows中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。(3)pathinfo:返回文件路径的信息语法:mixedpathinfo(string$path[,int$options])说明:返回一个关联数组包含有path的信息。包括目录名、文件名、扩展名,对应数组单元:dirname,basename和extension。可以通过参数options指定要返回哪些单元。它们包括:PATHINFO_DIRNAME,PATHINFO_BASENAME和PATHINFO_EXTENSION。默认是返回全部的单元。如果不是要求取得所有单元,则本函数返回字符串。示例:(二)遍历目录在进行PHP编程时,需要对服务器某个目录下面的文件进行浏览,通常称为遍历目录。取得一个目录下的文件和子目录,就需要用到:opendir()、readdir()、closedir()和rewinddir()。1、opendir:打开目录句柄语法:resourceopendir(string$path[,resource$context])说明:打开一个目录句柄,可用于之后的closedir(),readdir()和rewinddir()调用中。如果成功则返回目录句柄的resource,失败则返回FALSE。如果path不是一个合法的目录或者因为权限限制或文件系统错误而不能打开目录,opendir()返回FALSE并产生一个E_WARNING级别的PHP错误信息。可以在opendir()前面加上“@”符号来抑制错误信息的
本文标题:PHP文件系统处理
链接地址:https://www.777doc.com/doc-5210458 .html