《第11章-文件操作.ppt》由会员分享,可在线阅读,更多相关《第11章-文件操作.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 PHP第11章 文件操作文件的读写目录的操作文件指针上传与下载 目录文件操作进阶11.211.211.111.1文件操作入门 11.1 文件操作入门1.文件读写读取文件file_get_contents()函数函数用于将文件的内容全部读取到一个字符串中string file_get_contents(string$filename,/指定要读取的文件路径指定要读取的文件路径bool$use_include_path=false,/可选,在可选,在php.ini中配置的中配置的include_path路径里搜寻文件路径里搜寻文件resource$context,/可选,用于资源流上下文操作可选
2、,用于资源流上下文操作int$offset=0,/可选,指定在文件中开始读取的位置,默认从文件头开始可选,指定在文件中开始读取的位置,默认从文件头开始int$maxlen /可选,用于指定读取的最大字节数,默认为整个文件的大小可选,用于指定读取的最大字节数,默认为整个文件的大小)11.1 文件操作入门1.文件读写读取文件/相对路径相对路径$filename=./123.txt;echo file_get_contents($filename);/输出当前目录下的输出当前目录下的123.txt文件内容文件内容/绝对路径绝对路径$filename=C:/Windows/System32/drive
3、rs/etc/hosts;echo file_get_contents($filename);/输出操作系统的输出操作系统的hosts文件内容文件内容除了文本文件除了文本文件,file_get_contents()还可以读取图片等其他类型读取图片等其他类型的文件file_get_contents()函数的使用具体案例请参考教材 11.1 文件操作入门1.文件读写读取文件/只允许访问只允许访问PHP脚本所在的目录脚本所在的目录ini_set(open_basedir,C:/web/apache2.4/htdocs);/或用相对路径或用相对路径“./”echo file_get_contents(
4、./123.txt);/可以读取可以读取echo file_get_contents(C:/web/123.txt);/无法读取无法读取另外,open_basedir不仅不仅针对文件操作函数有效,对于对于include、require等和文件有关的操作都会产生影响都会产生影响。因此,读者在使用时需酌情考虑。11.1 文件操作入门1.文件读写按行读取文件file()函数函数可以将整个文件读入到数组中。执行成功,则返回一个数组,数组中的每个元素都是文件中的一行,包括换行符在内。如果执行失败,则返回false。array file(string$filename,int$flags=0,resour
5、ce$context )$filename指定读取的文件路径,$flags指定读取方式的选项。11.1 文件操作入门1.文件读写按行读取文件关于$flags可以指定的常量指定的常量具体如下。FILE_USE_INCLUDE_PATH:在include_path中查找文件FILE_IGNORE_NEW_LINES:指定返回值数组的每个元素值末尾不添加换行符FILE_SKIP_EMPTY_LINES:跳过空行具体案例请参考教材 11.1 文件操作入门1.文件读写写入文件使用文件记录程序处理后的内容时,可以使用file_put_contents()函数函数来完成。int file_put_conte
6、nts(string$filename,/指定要写入的文件路径(包含文件名称)指定要写入的文件路径(包含文件名称)mixed$data,/指定要写入的内容指定要写入的内容int$flags=0,/可选,指定写入选项可选,指定写入选项resource$context/可选,用于资源流上下文操作可选,用于资源流上下文操作)函数执行成功时返回写入到文件内数据的字节数,失败返回false。11.1 文件操作入门1.文件读写写入文件常量FILE_USE_INCLUDE_PATH表示在include_path中查找$filename常量FILE_APPEND表示追加写入具体案例请参考教材 11.1 文件操
7、作入门2.文件常用操作文件常用操作文件重命名移动路径文件复制文件删除 11.1 文件操作入门2.文件常用操作文件重命名和移动路径rename()函数函数用于实现文件的重命名或移动重命名或移动路径,其声明方式如下。bool rename(string$oldname,string$newname,resource$context )$oldname表示原文件路径$newname表示目标路径如果两个文件路径在同一个目录下,执行重命名操作如果不在同一个目录下,则执行移动操作该函数执行成功时返回true,执行失败返回false 11.1 文件操作入门2.文件常用操作文件重命名和移动路径/重命名重命名
8、test.txt 为为 test.bakrename(./test.txt,./test.bak);/移动移动 test.bak 到到 C:/web/test.txtrename(./test.bak,C:/web/test.txt);需要注意的是,在对文件进行操作时,若目标路径是个已经存在的存在的文件,会自动覆盖自动覆盖。11.1 文件操作入门2.文件常用操作文件复制copy()函数函数用于实现文件复制文件复制的功能,其声明方式如下。bool copy(string$source,string$dest,resource$context )$source表示原文件路径$dest表示目标路径当
9、文件复制成功时返回true,失败时返回false 11.1 文件操作入门2.文件常用操作文件复制/在当前目录下复制文件在当前目录下复制文件copy(./test.txt,./new.txt);/跨目录复制文件跨目录复制文件copy(./123/test.txt,./456/new.txt);在进行文件复制时需要注意,若目标文件已经存在,会自动覆盖目标文件已经存在,会自动覆盖。11.1 文件操作入门2.文件常用操作文件删除bool unlink(string$filename,resource$context )$filename表示文件路径文件路径如果删除成功删除成功返回值为true,失败失败
10、则返回falseunlink(./test.txt);当前目录下的test.txt文件将被删除若不存在,则会提示Warning错误语法示例 11.1 文件操作入门3.文件类型和属性获取文件类型使用PHP的filetype()函数函数可以获取文件的类型文件的类型,示例代码如下。echo filetype(./123/1.txt);/输出结果:输出结果:fileecho filetype(./123);/输出结果:输出结果:dir在Windows系统中,PHP只能获得file(文件)、dir(目录)和unknown(未知)3种文件类型在Linux系统中,还可以获取block(块设备)、char(字
11、符设备)、fifo(命名管道)、link(符号链接)等文件类型 11.1 文件操作入门3.文件类型和属性获取文件属性函数函数功能功能int filesize(string$filename)获取文件大小int filectime(string$filename)获取文件的创建时间int filemtime(string$filename)获取文件的修改时间int fileatime(string$filename)获取文件的上次访问时间bool is_readable(string$filename)判断给定文件是否可读bool is_writable(string$filename)判断给定
12、文件是否可写bool is_executable(string$filename)判断给定文件是否可执行array stat(string$filename)获取文件的信息 11.1 文件操作入门3.文件类型和属性获取文件属性由于PHP中的int数据类型表示的数据范围有限,所以filesize()函数函数对于大于2GB的文件,并不能准确获取其大小,需斟酌使用。具体案例请参考教材 11.1 文件操作入门3.文件类型和属性获取文件属性除了上述方式外,还可以使用stat()函数函数获取文件的统计信息统计信息,示例代码如下。print_r(stat(./test.txt);输出stat()函数返回的数
13、组,其输出结果由索引数组和关联数组两种形式组成 11.1 文件操作入门3.文件类型和属性获取文件属性索引数组索引数组关联数组关联数组说明说明0dev设备编号1inoinode编号2modeinode保护模式3nlink链接数目4uid所有者的用户ID5gid所有者的组ID6rdev设备类型,如果是inode设备的话7size文件大小的字节数 11.1 文件操作入门3.文件类型和属性获取文件属性索引数组索引数组关联数组关联数组说明说明8atime上次访问时间(Unix时间戳)9mtime上次修改时间(Unix时间戳)10ctime上次inode改变时间(Unix时间戳)11blksize文件系统
14、IO的块大小12blocks所占据块的数目 11.1 文件操作入门4.目录操作计算机中的文件为了便于搜索和管理,通常将文件文件分目录进行存储目录进行存储。为此,PHP提供了相应的函数来操作目录,例如创建目录、删除目录、遍历目录等。11.1 文件操作入门4.目录操作创建目录在PHP中,mkdir()函数函数用于创建目录创建目录,其声明方式如下。bool mkdir(string$pathname,/指定要创建的目录指定要创建的目录int$mode=0777,/可选,指定目录的访问权限(用于可选,指定目录的访问权限(用于Linux环境)环境)bool$recursive=false,/可选,指定是
15、否递归创建目录可选,指定是否递归创建目录resource$context/可选,用于资源流上下文操作可选,用于资源流上下文操作)该函数执行成功返回true,失败返回false。11.1 文件操作入门4.目录操作创建目录mkdir(./test);/创建目录创建目录mkdir(./test1/test2,0777,true);/递归创建目录(若递归创建目录(若test1不存在会自动创建)不存在会自动创建)通过指定mkdir()函数的第3个参数为true,可以自动创建给定路径中不存在的目录,而若省略该参数,则会失败并提示Warning错误当要创建的最后一级目录已经存在时,也会创建失败并提示Warn
16、ing错误。11.1 文件操作入门4.目录操作删除目录与mkdir()函数相对应,rmdir()函数函数用于删除目录删除目录,其声明方式如下。bool rmdir(string$dirname,resource$context )$dirname指定要删除的目录名函数执行成功时返回true,失败返回false 11.1 文件操作入门4.目录操作删除目录rmdir(./test);/删除空目录(删除成功)删除空目录(删除成功)rmdir(./test1);/删除非空目录(删除失败)删除非空目录(删除失败)rmdir(./test1/test2);/删除空目录(删除成功)删除空目录(删除成功)示例
17、使用rmdir()进行删除时,会删除失败并提示Warning错误因此,对于非空目录,只有先清空里面的文件,才能够删除目录 11.1 文件操作入门4.目录操作遍历目录glob()函数函数用于寻找与模式(pattern)匹配的文件路径文件路径,也可以用于遍历目录遍历目录array glob(string$pattern,int$flags=0 )$pattern表示匹配模式,其写法与libc(C语言函数库)中的glob()函数指定的模式相同$flags用于指定一些选项,如GLOB_MARK表示在每个目录后面加一个斜线,GLOB_ONLYDIR表示仅返回与模式匹配的目录项函数的返回值是查找后的文件列
18、表数组 11.1 文件操作入门4.目录操作遍历目录print_r(glob(./*);/获取当前目录下的文件列表获取当前目录下的文件列表print_r(glob(./*.txt);/获取当前目录下所有的获取当前目录下所有的“txt”扩展名的文件扩展名的文件Array(0=./test 1=./test.php 2=./file.php 11.1 文件操作入门5.解析路径在程序中经常需要对文件路径进行操作文件路径进行操作,如解析路径中的文件名或目录等。pathinfo()函数basename()函数dirname()函数 11.1 文件操作入门5.解析路径basename()函数basename
19、()函数函数用于返回路径中的文件名文件名,其声明方式如下。string basename(string$path,string$suffix )$path用于指定路径名$suffix是可选参数,如果指定了该参数,且文件名是以$suffix结尾的,则返回的结果中会被去掉这一部分字符 11.1 文件操作入门5.解析路径basename()函数$path=C:/web/apache2.4/htdocs/index.html;echo basename($path);/输出结果:输出结果:index.htmlecho basename($path,.html);/输出结果:输出结果:index利用ba
20、sename()函数的第2个参数可以去掉文件名中的扩展名。示例 11.1 文件操作入门5.解析路径dirname()函数dirname()函数函数用于返回路径中的目录部分目录部分,其声明方式如下。string dirname(string$path,int$levels=1 )$path用于指定路径名$level是PHP 7新增的参数,表示上移目录的层数 11.1 文件操作入门5.解析路径dirname()函数$path=C:/web/apache2.4/htdocs/index.html;echo dirname($path);/输出结果:输出结果:C:/web/apache2.4/htdo
21、csecho dirname($path,2);/输出结果:输出结果:C:/web/apache2.4echo dirname($path,3);/输出结果:输出结果:C:/web利用dirname()函数可以轻松获取文件的所在目录 11.1 文件操作入门5.解析路径pathinfo()函数pathinfo()函数函数用于以数组形式返回路径的信息返回路径的信息,包括目录名、文件名和扩展名等mixed pathinfo(string$path,int$options=PATHINFO_DIRNAME|PATHINFO_BASENAME|PATHINFO_EXTENSION|PATHINFO_FI
22、LENAME )$path用于指定路径名$options用于指定要返回哪些项,默认返回全部,具体包括PATHINFO_DIRNAME(目录名)、PATHINFO_BASENAME(文件名)、PATHINFO_EXTENSION(扩展名)、PATHINFO_FILENAME(不含扩展名的文件名)11.1 文件操作入门5.解析路径pathinfo()函数$path=C:/web/apache2.4/htdocs/index.html;$info=pathinfo($path);echo$infodirname;/输出结果:输出结果:C:/web/apache2.4/htdocsecho$infob
23、asename;/输出结果:输出结果:index.htmlecho$infoextension;/输出结果:输出结果:htmlecho$infofilename;/输出结果:输出结果:indexpathinfo()函数的返回值是一个关联数组,通过该数组可以获取路径的信息。11.2 文件操作进阶1.文件指针打开文件创建文件指针利用指针读写关闭文件 11.2 文件操作进阶1.文件指针打开文件在PHP中打开文件使用的是打开文件使用的是fopen()函数函数,其声明方式如下。resource fopen(string$filename,string$mode,bool$use_include_path
24、=false,resource$context )$filename表示打开的文件路径,包括本地文件,HTTP或FTP协议的URL地址$mode表示文件打开的模式$use_include_path表示是否需要在include_path中搜寻文件$context用于资源流上下文操作该函数执行成功后,返回资源类型的文件指针,用于其他操作 11.2 文件操作进阶1.文件指针打开文件模式模式说明说明r只读方式打开,将文件指针指向文件头r+读写方式打开,将文件指针指向文件头w写入方式打开,将文件指针指向文件头并将文件大小截为0w+读写方式打开,将文件指针指向文件头并将文件大小截为0a写入方式打开,将文件
25、指针指向文件末尾a+读写方式打开,将文件指针指向文件末尾x创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败,返回false,并生成E_WARNING级别的错误信息x+创建并以读写方式打开,其他行为和“x”相同对于除“r”、“r+”模式外的其他操作,如果文件不存在,会尝试自动创建 11.2 文件操作进阶1.文件指针关闭文件在PHP中关闭文件关闭文件使用的是fclose()函数函数,其声明方式如下。bool fclose(resource$handle)fclose()函数只有1个参数$handle,表示fopen()函数成功打开文件时返回的文件指针。如果文件关
26、闭成功返回true,失败返回false。11.2 文件操作进阶1.文件指针读取文件(1)fread()函数函数用于读取指定长度的字符串读取指定长度的字符串,其声明方式如下。string fread(resource$handle,int$length)$handle参数表示文件指针$length用于指定读取的字节数该函数在读取到$length指定的字节数,或读取到文件末尾时就会停止读取,返回读取到的内容当读取失败时返回false具体案例请参考教材 11.2 文件操作进阶1.文件指针读取文件当使用fread()读取文件时,会影响文件指针指向的文件位置。l通过ftell()函数可以返回当前文件指针
27、的位置l通过rewind()函数可以倒回文件指针的位置$handle=fopen(./test.txt,r);/打开文件打开文件fread($handle,9);/读取读取9个字节个字节echo ftell($handle);/输出结果:输出结果:9rewind($handle);/倒回文件指针倒回文件指针echo ftell($handle);/输出结果:输出结果:0 11.2 文件操作进阶1.文件指针读取文件(2)fgetc()函数函数用于在打开的文件中读取一个字符读取一个字符,其声明方式如下。string fgetc(resource$handle$handle表示文件指针,该函数每次只
28、能读取一个字节。如果遇到EOF(End Of File,文件结束符标志)时,返回false。11.2 文件操作进阶1.文件指针读取文件$filename=./test.txt;file_put_contents($filename,itheima);$handle=fopen($filename,r);echo fgetc($handle);/输出结果:输出结果:iecho fgetc($handle);/输出结果:输出结果:tfgetc()示例 11.2 文件操作进阶1.文件指针读取文件(3)fgets()函数函数用于读取文件中的一行读取文件中的一行,其声明方式如下。string fgets
29、(resource$handle,int$length )$length用于指定读取的字节数。该函数将从文件中读取一行,并返回长度最多为$length-1字节的字符串。在碰到换行符、EOF或已经读取了$length-1字节后停止。如果没有指定$length,则默认值为1024字节。11.2 文件操作进阶1.文件指针读取文件$filename=./test.txt;file_put_contents($filename,123456n78);$handle=fopen($filename,r);echo fgets($handle,4);/输出结果:输出结果:123echo str_replac
30、e(n,*,fgets($handle);/输出结果:输出结果:456*fgets()示例 11.2 文件操作进阶1.文件指针写入文件fwrite()函数函数用于写入文件写入文件,其声明方式如下。int fwrite(resource$handle,string$string,int$length )$handle表示文件指针$string表示要写入的字符串$length表示指定写入的字节数,如果省略表示写入整个字符串 11.2 文件操作进阶1.文件指针写入文件$filename=./test.txt;$handle=fopen($filename,w);/以写入方式打开文件以写入方式打开文件
31、fwrite($handle,test);/向文件中写入内容向文件中写入内容echo file_get_contents($filename);/输出结果:输出结果:testfwrite($handle,123456);/继续向文件中写入内容继续向文件中写入内容echo file_get_contents($filename);/输出结果:输出结果:test123456fwrite()函数会从文件指针的位置开始写入内容。需要注意的是,若文件指针的位置原来已经有了内容,会被自动覆盖。11.2 文件操作进阶2.目录句柄(1)opendir()函数opendir()函数函数用于打开一个目录句柄目录句
32、柄,其声明方式如下。resource opendir(string$path,resource$context )$path指定要打开的目录路径。该函数如果执行成功,返回资源类型的目录句柄,如果失败,返回false。11.2 文件操作进阶2.目录句柄(2)closedir()函数closedir()函数函数用于关闭目录句柄关闭目录句柄,其声明方式如下。void closedir(resource$dir_handle )函数执行后没有返回值。11.2 文件操作进阶2.目录句柄(3)readdir()函数readdir()函数函数用于从目录句柄中读取条目读取条目,其声明方式如下。string r
33、eaddir(resource$dir_handle )函数执行成功返回目录中下一个文件的文件名,失败时返回false。11.2 文件操作进阶2.目录句柄(4)rewinddir()函数rewinddir()函数函数用于倒回目录句柄倒回目录句柄,其声明方式如下。void rewinddir(resource$dir_handle)函数执行后将$dir_handle重置到目录的开头,没有返回值。具体案例请参考教材 11.2 文件操作进阶3.资源流在前面讲过的如file_get_contents()、fopen()等函数中,有一个可选参数$content,表示资源流下上文资源流下上文。所谓流(所谓流(Stream)是指数据源在程序之间经历的路径,当传输方以二进制流的方式传送某个资源(如文件内容)给接收方时,就形成了一条资源流。11.2 文件操作进阶3.资源流PHP提供了流相关的函数流相关的函数,用于通过一套统一的操作,来处理文件、网络连接、压缩传输等多种类型的数据源。为方便开发,PHP封装了“file:/”、“http:/”、“ftp:/”、“zlib:/”等常用协议。具体案例请参考教材
限制150内