• 1. 动态网站开发与全程实例ISBN书号:97-7-302-16213-1作者:聂庆鹏 毛书朋 王志乐版权所有 本书编写组PHP+MYSQL出版:清华大学出版社 本书的技术支持、意见反馈及勘误信息请访问http://www.17php.com 作者电子信箱:rznqp@163.com rzmsp@163.com 10/17/20181本书技术支持站点:http://www.17php.com
  • 2. 第7章 PHP5文件与目录操作 7.1 文件操作 7.2 目录操作 7.3 文件上传的实现 案例7 利用文件操作实现支持头像上传的用户注册程序10/17/20182本书技术支持站点:http://www.17php.com
  • 3. 7.1 文件操作在网络编程中要用到的文件操作大致可以分为两大类,一种是普通文件的操作,另一种是数据库文件的操作。在普通文件的操作中应当属对记事本文件的操作最为简单,下面我们就来探讨一下,PHP对文件(以记事本为例)的操作。 实际上,PHP对文件的操作已经给我们规定好了若干个内置函数。我们要想利用PHP对文件进行操作,就是我们在PHP中对相关文件处理函数的应用。现在就常用的文件处理函数讲解如下: 10/17/20183本书技术支持站点:http://www.17php.com
  • 4. 7.1 文件操作1. resource fopen ( string filename, string mode [, bool use_include_path ] ) 打开文件或者 URL。 其中string filename是要打开的文件名,必须为字符串形式。如果filename是"scheme://..."(如http://...)的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果PHP认为filename指定的是一个本地文件(如"num.txt"),将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。 string mode是打开文件的方式,必须为字符形式,其可能值列表如下: ’r’,只读形式,文件指针指向文件的开头。 10/17/20184本书技术支持站点:http://www.17php.com
  • 5. 7.1 文件操作1. resource fopen ( string filename, string mode [, bool use_include_path ] ) ’r+’,可读可写,文件指针指向文件的开头。 ’w’,只写形式,文件指针指向文件的开头,打开同时清除所有内容,如果文件不存在,将尝试建立文件。 ’w+’,可读可写,文件指针指向文件的开头,打开同时清除所有内容,如果文件不存在,将尝试建立文件。 ’a’,追加形式(只可写入),文件指针指向文件的最后,如果文件不存在,将尝试建立文件。 ’a+’,可读可写,文件指针指向文件的最后,如果文件不存在,将尝试建立文件。 10/17/20185本书技术支持站点:http://www.17php.com
  • 6. 7.1 文件操作2. string fgets ( int handle [, int length] ) 从文件指针中读取一行。 其中int handle是要读入数据的文件流指针,由fopen函数返回数值。 int length是要读入的字符个数,实际读入的字符个数是length-1。 从handle指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。出错时返回 FALSE。 10/17/20186本书技术支持站点:http://www.17php.com
  • 7. 7.1 文件操作3. int fwrite ( resource handle, string string [, int length] ) 写入文件。同int fputs(resource handle, string str, int [length])。 fwrite() 把 string 的内容写入文件指针handle处。如果指定了length,当写入了 length 个字节或者写完了string以后,写入就会停止。 fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。 10/17/20187本书技术支持站点:http://www.17php.com
  • 8. 7.1 文件操作4. bool fclose ( resource handle ) 关闭一个已打开的文件指针。 将 handle 指向的文件关闭。如果成功则返回 TRUE,失败则返回 FALSE。 文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。 10/17/20188本书技术支持站点:http://www.17php.com
  • 9. 7.1 文件操作例:文件7-1.php:访客计数器 我们不难发现制作一个文件类型计数器的基本思路是:打开一个文件读出文件里面的内容(数据)数据+1后再写入该文件关闭文件。由于当文件以可读可写方式打开时,文件的内容同时被清空,所有我们在做文件计数器是的具体的实际步骤是:以只读方式打开一个文件读出文件里面的内容(数据)关闭文件再以可读可写方式打开文件数据+后再写入该文件关闭文件。10/17/20189本书技术支持站点:http://www.17php.com
  • 10. 7.2 目录操作 目录的操作主要是利用相关的目录函数来实现的。我们就先来看一下有关的目录函数。 string getcwd ( void ) 取得当前工作目录。 bool chdir ( string directory ) 将当前目录改为directory。 10/17/201810本书技术支持站点:http://www.17php.com
  • 11. 7.2 目录操作 new dir(sting directory) 此函数的作用是将输入的目录名转换为一个对象并返回,如下: class dir { dir ( string directory ) string path resource handle string read ( void ) void rewind ( void ) void close ( void ) }10/17/201811本书技术支持站点:http://www.17php.com
  • 12. 7.2 目录操作 该对象含有两个属性和3个方法。两个属性为: handle 目录句柄 path 打开目录的路径 三个方法为: read ( void ) 读取目录 rewind ( void ) 复位目录 close ( void ) 关闭目录 这三个方法与后面的将要介绍的readdir()、rewinddir()、closedir()三个函数的作用相同。10/17/201812本书技术支持站点:http://www.17php.com
  • 13. 7.2 目录操作 resource opendir ( string path ) 打开目录句柄。path为要打开的目录路径. string readdir ( resource dir_handle ) 返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。 dir_handle为目录句柄的 resource,之前由 opendir()打开。 成功则返回文件名,失败返回 FALSE。 10/17/201813本书技术支持站点:http://www.17php.com
  • 14. 7.2 目录操作 void rewinddir ( resource dir_handle ) 倒回目录句柄。将dir_handle指定的目录流重置到目录的开头。 dir_handle为目录句柄的 resource,之前由 opendir()打开。 void closedir ( resource dir_handle ) 关闭目录句柄。关闭由dir_handle指定的目录流。 流必须之前被 opendir() 所打开。10/17/201814本书技术支持站点:http://www.17php.com
  • 15. 7.2 目录操作 array scandir ( string directory [, int sorting_order] ) 列出指定路径中的文件和目录。 返回一个array,包含有directory中的文件和目录。 参数directory是要被浏览的目录。 参数sorting_order是文件的排列顺序,默认的排序顺序是按字母升序排列。如果使用了可选参数 sorting_order(设为 1),则排序顺序是按字母降序排列。 bool chroot ( string directory ) 将当前进程的根目录改变为 directory。 本函数仅在系统支持且运行于 CLI,CGI 或嵌入 SAPI 版本时才能正确工作。此外本函数还需要root权限10/17/201815本书技术支持站点:http://www.17php.com
  • 16. 7.2 目录操作 例:文件7-2.php:目录输出 例:文件7-3.php:遍历图片显示 10/17/201816本书技术支持站点:http://www.17php.com
  • 17. 7.3 文件上传的实现文件上传的功能也是我们经常使用的,有了文件上传的功能,我们不仅可以为我们的网站动态添加附件,以实现网页的文字编辑比较弱的功能,而且我们还可以实现网站中相关图片、Flash动画等的动态更新等等。下面我们就通过一个实例来了解一下文件上传的基本原理。 例:文件7-4.php:文件上传实例 10/17/201817本书技术支持站点:http://www.17php.com
  • 18. 案例7 利用文件操作实现支持头像上传的用户注册程序 设计一简单的用户注册和登陆界面,将用户注册信息记入文本文件,并实现用户登陆与上传个人照片的功能。10/17/201818本书技术支持站点:http://www.17php.com
  • 19. 案例7 利用文件操作实现支持头像上传的用户注册程序 一、案例分析 仔细分析本案例,实际上就是文件操作和文件上传的综合应用,具体制作步骤如下: (1)设计一简单的用户注册界面,含有上传头像的表单项; (2)新建一接收用户注册信息的文件,本文件所要完成的主要功能为有:接收注册的用户名、登陆口令和头像文件,实现头像(一图片)的上传,把用户名、登陆口令和上传后的头像文件信息记录到一文本文件中;10/17/201819本书技术支持站点:http://www.17php.com
  • 20. 案例7 利用文件操作实现支持头像上传的用户注册程序 一、案例分析 (3)设计一简单的用户登陆界面(用用户注册的界面稍加修改即可); (4)新建一接收用户登陆信息的文件,本文件所要完成的主要功能有:接受登陆用户的用户名和登陆口令,从记录注册信息的文本文件中读出注册用户信息,检查接受的登陆用户名是否存在以及登陆口令是否正确,若正确输出登陆成功信息和头像图片,否则,输出错误信息。 10/17/201820本书技术支持站点:http://www.17php.com
  • 21. 案例7 利用文件操作实现支持头像上传的用户注册程序 二、案例编写 login.html login_action.php land.html land_action.php10/17/201821本书技术支持站点:http://www.17php.com
  • 22. 本章小结本章中我们着重讲解了PHP 5对文件和目录的操作以及文件上传的实现。通过学习,我们应该能利用PHP 5中对文件和目录的相关操作,实现诸如文本计数器、目录和文件的遍历、不同类型文件的上传等,进而可以做出利用文本操作实现用户注册信息的记录和登陆信息的校验等。10/17/201822本书技术支持站点:http://www.17php.com
  • 23. 练 习 题 1. PHP 5中文件打开的方式有几种,各有什么样的文件操作权限? 2. PHP 5文本文件操作可否实现计数器的功能,若能,如何实现? 3. PHP 5中要实现文件的上传,你认为需要哪几步,具体代码事什么? 4. PHP 5中用哪些函数可以实现从文本文件中逐行读出数据?10/17/201823本书技术支持站点:http://www.17php.com