第9章 文件操作ppt课件(完整版).pptx

上传人:春哥&#****71; 文档编号:16893479 上传时间:2022-05-19 格式:PPTX 页数:79 大小:738.53KB
返回 下载 相关 举报
第9章 文件操作ppt课件(完整版).pptx_第1页
第1页 / 共79页
第9章 文件操作ppt课件(完整版).pptx_第2页
第2页 / 共79页
点击查看更多>>
资源描述

《第9章 文件操作ppt课件(完整版).pptx》由会员分享,可在线阅读,更多相关《第9章 文件操作ppt课件(完整版).pptx(79页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第9章 文件操作ppt课件(完整版)第9章 文件操作PHP基础案例教程(第2版)学习目标/Target 掌握读取文件操作,能够通过不同的方式读取文件内容 掌握写入文件操作,能够通过不同的方式向文件写入内容 掌握重命名、复制和删除文件操作,能够使用相关函数对文件进行操作 掌握文件类型和属性操作,能够使用相关函数获取文件的类型、大小、权限和创建时间学习目标/Target 掌握创建、删除和遍历目录操作,能够使用相关函数对目录进行操作 掌握路径解析操作,能够使用相关函数获取文件路径中的文件名和目录名 熟悉文件进阶操作,能够利用文件指针、目录句柄和资源流操作文件章节概述/ Summary在Web开发中经

2、常需要对文件进行操作,如上传附件、上传用户头像、判断文件是否存在、通过文件保存数据、删除文件等。PHP提供了一系列的文件操作函数,可以很方便地对文件操作,本章将针对文件操作进行详细讲解。目录/Contents0102文件基本操作文件进阶操作文件基本操作 先定一个小目标!掌握文件读取操作,能够取全部读取或按行读取文件内容9.1.1 读取文件9.1.1 读取文件file_get_contents()函数用于将文件的内容全部读取到一个字符串中。1. 读取文件全部内容string file_get_contents(string $filename , bool $use_include_path =

3、 false , resource $context , int $offset = 0 , int $maxlen)$filename用于指定要读取文件的路径。$use_include_path为可选参数,若想在php.ini中配置的include_path路径里搜寻文件, 可以将该参数设为1。$context用于资源流上下文操作。$offset用于指定在文件中开始读取的位置,默认从文件头开始。$maxlen用于指定读取的最大字节数,默认为整个文件的大小。9.1.1 读取文件2. 按行读取文件内容file()函数可以将整个文件内容读取到数组中,数组中的每个元素都是文件中的一行,包括换行符,函

4、数执行成功返回数组,执行失败则返回false,其基本语法格式如下。array file(string $filename , int $flags = 0 , resource $context)$filename用于指定读取的文件路径。$flags用于指定读取方式,使用常量表示,可以指定的常量如下。 FILE_USE_INCLUDE_PATH:在php.ini配置的include_path中查找文件。 FILE_IGNORE_NEW_LINES:指定返回值数组的每个元素值末尾不添加换行符。 FILE_SKIP_EMPTY_LINES:跳过空行。9.1.1 读取文件PHP提供的file_get

5、_contents()函数和file()函数除了能够读取本地文件,还可以读取远程文件。在使用前,应确保php.ini中的allow_url_fopen配置项处于开启状态,否则不允许远程请求。多学一招:读取远程文件 先定一个小目标!掌握文件写入操作,能够将字符串写入到文件中9.1.2 写入文件9.1.2 写入文件file_put_contents()函数可以将一个字符串写入到文件,函数执行成功则返回写入到文件中数据的字节数,失败返回false,其基本语法格式如下。int file_put_contents(string $filename, mixed $data , int $flags =

6、0 ,resource $context)$filename用于指定要写入的文件路径(包含文件名称)。$data用于指定要写入的内容。$flags用于指定写入选项,可以指定的常量如下。 FILE_USE_INCLUDE_PATH:在include_path中查找$filename。 FILE_APPEND:表示追加写入。9.1.2 写入文件在PHP脚本中书写中文字符串时,字符串的编码取决于PHP脚本文件所使用的编码。在进行文件读写操作时,应注意字符编码问题,防止编码不同导致中文乱码。多学一招:编码转换 ./test 1 = ./test.php 2 = ./file.php)9.1.5 创建、

7、删除和遍历目录PHP提供了disk_total_space()函数和disk_free_space()函数,可以获取磁盘的总大小和可用空间,这两个函数的使用示例如下。多学一招:查看磁盘大小和可用空间这两个函数只对磁盘根目录起作用,如果给定的是一个子目录,获取到的依然是磁盘根目录的结果。echo disk_total_space(D:);/ 获取D盘总大小echo disk_free_space(D:); / 获取D盘可用空间大小 先定一个小目标!掌握路径解析操作,能够运用相关函数完成对文件路径的解析9.1.6 路径解析9.1.6 路径解析在程序中经常需要对文件路径进行操作,如解析文件路径中的文

8、件名或目录等。PHP提供了basename()函数、dirname()函数和pathinfo()函数完成对文件路径的解析,下面分别对这些函数的使用进行讲解。9.1.6 路径解析$path用于指定路径名;$suffix是可选参数,如果指定了该参数,且文件名是以$suffix结尾的,则返回的结果中会被去掉这一部分字符。1. basename()函数basename()函数用于返回路径中的文件名,其基本语法格式如下。string basename(string $path , string $suffix )9.1.6 路径解析1. basename()函数下面演示basename()函数的使用方法

9、。$path = C:/web/apache2.4/htdocs/index.html;echo basename($path);/ 输出结果:index.htmlecho basename($path, .html);/ 输出结果:9.1.6 路径解析$path用于指定路径名。$levels是PHP 7新增的参数,表示上移目录的层数。2. dirname()函数dirname()函数用于返回路径中的目录部分,其基本语法格式如下。string dirname(string $path , int $levels = 1)9.1.6 路径解析2. dirname()函数下面演示dirname()

10、函数的使用方法,示例代码如下。$path = C:/web/apache2.4/htdocs/index.html;echo dirname($path);/ 输出结果:C:/web/apache2.4/htdocsecho dirname($path, 2);/ 输出结果:C:/web/apache2.4echo dirname($path, 3);/ 输出结果:C:/9.1.6 路径解析pathinfo()函数用于以数组形式返回文件路径的信息,包括目录名、文件名和扩展名等,其基本语法格式如下。3. pathinfo()函数$path用于指定路径名。$options用于指定要返回哪些项,默认

11、返回全部信息,还可以设置为返回具体的内容。mixed pathinfo(string $path , int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME)9.1.6 路径解析3. pathinfo()函数$options可以指定的常量如下。PATHINFO_DIRNAME(目录名)PATHINFO_BASENAME(文件名)PATHINFO_ EXTENSION(扩展名)PATHINFO_FILENAME(不含扩展名的文件名)9.1.6 路径解析3. pathi

12、nfo()函数下面演示pathinfo()函数的使用方法,示例代码如下。$path = C:/web/apache2.4/htdocs/index.html;$info = pathinfo($path);echo $infodirname;/ 输出结果:C:/web/apache2.4/htdocsecho $infobasename;/ 输出结果:index.htmlecho $infoextension;/ 输出结果:htmlecho $infofilename;/ 输出结果:index文件进阶操作 先定一个小目标!掌握文件指针操作,能够利用文件指针进行文件打开、关闭、读取和写入操作9.

13、2.1 文件指针9.2.1 文件指针在读取文件时,经常需要对文件中的内容进行跳跃式访问,例如输出奇数行的内容,文件被打开后内部文件指针位于文件起始位置,这时就需要在读取第1行内容之后将文件指针移动到第3行。9.2.1 文件指针$filename表示打开的文件路径,不仅可以是本地文件,而且可以是HTTP或FTP协议的URL地址。$mode表示文件打开的模式。$use_include_path表示是否需要在include_path中搜寻文件。$context用于资源流上下文操作,该函数执行成功返回资源类型的文件指针,用于其他操作。1. 打开文件在PHP中使用fopen()函数打开文件,其基本语法格

14、式如下。resource fopen(string $filename, string $mode , bool $use_include_path = false , resource $context)9.2.1 文件指针fopen()函数常用文件打开模式如表所示。模式说明r只读方式打开,将文件指针指向文件头r+读写方式打开,将文件指针指向文件头w写入方式打开,将文件指针指向文件头并将文件大小截为0w+读写方式打开,将文件指针指向文件头并将文件大小截为0a写入方式打开,将文件指针指向文件末尾a+读写方式打开,将文件指针指向文件末尾x创建并以写入方式打开,将文件指针指向文件头。如果文件已存在

15、,则fopen()调用失败,返回false,并生成E_WARNING级别的错误信息x+创建并以读写方式打开,其他行为和x模式相同对于除“r”和“r+”模式外的其他操作,如果文件不存在,会尝试自动创建。1. 打开文件9.2.1 文件指针在PHP中使用fclose()函数关闭文件,其基本语法格式如下。2. 关闭文件参数$handle表示使用fopen()函数打开文件时返回的文件指针。如果文件关闭成功返回true,失败返回false。bool fclose(resource $handle)9.2.1 文件指针3. 读取文件(1)fread()函数fread()函数用于读取指定长度的字符串,其基本语

16、法格式如下。$handle表示文件指针。$length用于指定读取的字节数。该函数在读取到$length指定的字节数,或读取到文件末尾时就会停止读取,返回读取到的内容,若读取失败则返回false。string fread(resource $handle, int $length)9.2.1 文件指针3. 读取文件(2)fgetc()函数fgetc()函数用于在打开的文件中读取一个字符,其基本语法格式如下。$handle表示文件指针,读取文件时遇到EOF(End Of File,文件结束符标志)就返回false。string fgetc(resource $handle)9.2.1 文件指针3

17、. 读取文件(3)fgets()函数fgets()函数用于读取文件中的一行,其基本语法格式如下。$length用于指定读取的字节数,默认值为1024字节,如果指定$length,则返回长$length - 1字节的字符串。读取文件时遇到换行符、EOF或已经读取了$length - 1字节就停止。string fgets(resource $handle , int $length)9.2.1 文件指针4. 写入文件fwrite()函数用于向文件写入内容,其基本语法格式如下。$handle 表示文件指针。$string 表示要写入的字符串。$length 表示指定写入的字节数,省略则表示写入整个

18、字符串。int fwrite(resource $handle, string $string , int $length)9.2.1 文件指针多学一招:文件加锁机制Web应用程序上线之后面临的一个普遍问题就是并发访问。尤其是对于文件操作,如果有多个用户在同一时刻访问服务器上的同一个文件,这意味着不同的访问进程会在同一时刻读/写同一个文件,很有可能造成数据错乱或者文件的损坏。为了避免这个问题,PHP提供了文件加锁机制,这种机制是通过flock()函数来实现的。9.2.1 文件指针$handle表示文件指针。$operation用于指定锁定类型。$wouldblock为可选参数,设置为1或tru

19、e时,表示当进行锁定时阻挡其他进程。多学一招:文件加锁机制flock()函数的基本语法格式如下。bool flock(resource $handle, int $operation , int &$wouldblock)9.2.1 文件指针多学一招:文件加锁机制flock()函数的$operation参数的值有多个,具体如下。LOCK_SH:取得共享锁定(读文件时使用)。LOCK_EX:取得独占锁定(写文件时使用)。LOCK_UN:释放锁定(无论共享或独占,都用它释放)。LOCK_NB:如果不希望flock()在锁定时堵塞,则给$operation加上LOCK_NB。当一个用户进程在访问文件

20、时加上锁,其他用户进程要想对该文件进行访问,就必须等到锁定被释放,这样就可以避免在并发访问同一个文件时破坏数据。 先定一个小目标!掌握目录句柄操作,能够打开目录、关闭目录、读取目录和倒回目录句柄9.2.2 目录句柄9.2.2 目录句柄1. opendir()函数opendir()函数用于打开一个目录句柄,其基本语法格式如下。$path用于指定要打开的目录路径。如果函数执行成功,返回资源类型的目录句柄,执行失败返回false。resource opendir(string $path , resource $context)9.2.2 目录句柄closedir()函数用于关闭目录句柄,其基本语法

21、格式如下。2. closedir()函数$dir_handle是使用opendir()函数打开的目录句柄。closedir()函数执行后没有返回值。void closedir(resource $dir_handle)9.2.2 目录句柄函数执行成功则返回目录中下一个文件的文件名,执行失败返回false。3. readdir()函数readdir()函数用于从目录句柄中读取条目,其基本语法格式如下。string readdir(resource $dir_handle)9.2.2 目录句柄函数执行成功后将$dir_handle重置到目录的开头。4. rewinddir()函数rewinddir

22、()函数用于倒回目录句柄,其基本语法格式如下。void rewinddir(resource $dir_handle)9.2.2 目录句柄利用目录句柄函数不仅可以遍历某个目录,而且可以递归遍历所有的子目录,统计目录中所有文件的大小。多学一招:统计目录中所有文件的大小?phpfunction total($path) $size = 0; $handle = opendir($path); while (false != ($file = readdir($handle) if ($file != . & $file != .) $file = $path/$file; $size += is_

23、dir($file) ? total($file) : filesize($file); closedir($handle); return $size;echo 当前目录大小为:, total(./), 字节; 先定一个小目标!掌握资源流操作,能够以HTTP协议POST方式发送数据9.2.3 资源流9.2.3 资源流流(Stream)是指数据在数据源(文件)和程序(内存)之间经历的路径。在数据传输过程中,传输方以二进制流的方式传送某个资源(如文件内容)给接收方,这就形成了一条资源流,接收方可以处理接收的流内容。在前面讲过的fopen()函数和file_get_contents()函数中都有一

24、个可选参数$context,表示资源流下上文。9.2.3 资源流PHP提供了流相关的函数,用于通过一套统一的操作来处理文件、网络连接、压缩传输等多种类型的数据源。为了方便开发时使用,PHP封装了“file:/”“http:/”“ftp:/”和“zlib:/”等常用协议。 先定一个小目标!掌握文件上传操作,能够通过表单上传文件并在PHP中接收上传的文件9.2.4 文件上传9.2.4 文件上传使用表单可以进行文件上传,在使用时需要设置表单标签的enctype属性,将其设为multipart/form-data,示例代码如下。 9.2.4 文件上传当用户通过上传文件表单选择一个文件并提交后,PHP会

25、将用户提交的上传文件信息保存到超全局数组变量$_FILES中。$_FILES的一维数组键名是文件上传输入框的name属性名“upload”,二维数组中保存了该上传文件的具体信息,关于这些信息的说明如下。$_FILESuploadname:上传文件的名称。$_FILESuploadtype:上传文件的MIME类型。$_FILESuploadtmp_name:保存在服务器中的临时文件路径。$_FILESuploaderror:文件上传的错误代码,0表示成功。$_FILESuploadsize:上传文件的大小,以字节为单位。9.2.4 文件上传当上传文件出现错误时,$_FILESuploaderro

26、r中会保存不同的错误代码。代码常量说明0UPLOAD_ERR_OK文件上传成功1UPLOAD_ERR_INI_SIZE文件大小超过了php.ini中upload_max_filesize选项限制的值2UPLOAD_ERR_FORM_SIZE文件大小超过了表单中MAX_FILE_SIZE的值3UPLOAD_ERR_PARTIAL文件只有部分被上传4UPLOAD_ERR_NO_FILE没有文件被上传5UPLOAD_ERR_NO_TMP_DIR找不到临时目录6UPLOAD_ERR_CANT_WRITE文件写入失败9.2.4 文件上传文件上传成功后会暂时保存在服务器的临时目录中(C:WindowsTe

27、mp),为了让文件保存在指定目录中,需要使用move_uploaded_file()函数将上传文件从临时目录移动到新的位置。move_uploaded_file()函数在移动时会先判断给定文件是否是通过HTTP POST上传的合法文件,防止将服务器中的其他文件当成用户上传文件,在移动文件时如果遇到了同名文件,会自动进行替换。9.2.4 文件上传多文件上传是指一次性上传多个文件。多文件上传有两种不同的需求,一种是在页面中,有多处文件上传,另一种是一个上传按钮,需要上传多个文件。多学一招:多文件上传9.2.4 文件上传多学一招:多文件上传在PHP处理多文件上传时,使用$_FILES接收上传文件的信

28、息,利用循环处理文件信息。$len = count($_FILESuploadname);for ($i = 0; $i $_FILESuploadname$i, type = $_FILESuploadtype$i, tmp_name = $_FILESuploadtmp_name$i, error = $_FILESuploaderror$i, size = $_FILESuploadsize$i ;动手实践:文件存储系统 先定一个小目标!掌握文件存储系统的开发,能够独立完成代码编写动手实践:文件存储系统制作一个简单的文件存储系统,主要包括文件上传和文件下载功能。文件上传功能显示允许上传的文件扩展名为doc、zip、txt、jpg、png、gif,文件上传成功后自动生成文件名,展示文件列表,点击文件名实现下载文件。具体实现步骤如下。编写文件上传表单。处理上传文件,限制允许上传的文件类型,自动生成文件名,将文件保存到uploads目录。展示上传文件列表,给每个文件名添加下载链接,实现单击文件名下载文件。实现文件下载功能。本章小结本章首先讲解了文件基本操作,主要包括读取文件、写入文件,以及重命名、复制和删除文件等内容;然后讲解了文件进阶操作,主要包括文件指针、目录句柄、资源流,以及文件上传、下载等内容。通过本章的学习,读者应能够熟练掌握PHP中的文件操作。本章小结

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com