第1章 文件编程的基础
1.1 看一个实际的需求
说明:在我们的web开发中, 我们会使用到文件上传,下载,创建文件,删除用户,创建目录等等,这时我们就需要使用文件编程.
1.2 文件的基本概念
数据源, 在php开发中,数据存放的几种形式, 图示:
1.3 文件的输入流和输出流
- 在php的文件编程中,文件是以字符流或者字节流两种形式来操作.
- 画图输入流和输出流
说明
(1) 输入和输出都是针对php程序(即内存)
(2) 读入到php程序【读入内容】, 输入流
(3) 从php程序,把内容保存到文件中,输出流.
1.4 php操作文件的方式
第2章 php文件编程
2.1 php文件编程函数一览
一、判断普通文件和目录
1.is_file()//判断给定文件名是否为一个正常的文件
2.is_dir()//判断给定文件名是否是一个目录
二、文件的属性
1.file_exists()//检查文件或目录是否存在
2.filesize()//取得普通文件大小
3.is_readable()//判断给定文件名是否可读
4.is_writable()//判断给定的文件名是否可写
5.filectime()//获取文件的创建时间
6.filemtime()//获取文件的修改时间
7.fileatime()//取得文件的上次访问时间
8.stat()//获取文件大部分属性值
三、目录的基本操作
1.basename()//返回路径中的文件名部分
2.dirname()//返回路径中的目录部分
3.pathinfo()//返回文件路径的信息
4.opendir()//打开目录句柄
5.readdir()//从目录句柄中读取条目,返回目录中下一个文件的文件名
6.rewinddir()//倒回目录句柄
7.closedir()//关闭目录句柄
8.mkdir()//新建目录
9.rmdir()//删除指定的空目录
10.scandir()//列出指定路径中的文件和目录
四、文件的基本操作
1.fopen()//打开文件或者 URL
2.fread()//读取文件
3.fgets()//从文件指针中读取一行
4.feof()//测试文件指针是否到了文件结束的位置
5.fwrite()//写入文件
6.rewind()//倒回文件指针的位置
7.flock()//轻便的咨询文件锁定
8.ftruncate()//将文件截断到给定的长度
9.fclose()//关闭一个已打开的文件指针
10.file() //把整个文件读入一个数组中
11.copy()//拷贝文件
12.unlink()//删除文件
13.file_get_contents()//将整个文件读入一个字符串
14.file_put_contents()//将字符串写入文件中
15.rename()//重命名一个文件或目录
16.readfile()//读入一个文件并写入到输出缓冲
2.2 获取文件的信息
- 获取文件信息的函数
- 第一种方式
- 第二种方式
2.3 读取文件的内容,并显示在网页
- 第一种方式
上面方式的分析: 我们是一次性的将内容读入到内存,这样处理大文件不是很好,因此这样我们可以使用第二种读取文件的方式.(可以设置缓冲)
- 第二种方式
- 第三种方式
第三种方式最简洁,使用的是最多的. file_get_contents file_put_contents()
小结:在实际开发中如何选择方式
(1) 如果我们处理的文件很大(100m),建议使用第二种
(2) 如果是普通的文件,没有特殊的要求,建议使用第三种.
2.4 第四种方式读取配置文件 config.ini
2.5 上机练习
xx.ini 的格式
属性名1=属性值1
属性名2=属性值2
2.6 如何创建文件,并写入内容
- 基本介绍
在php中,没有一个专门的函数来创建文件。他是通过fopen函数来实现.
function fopen($file_name, $mode);
说明$mode取值:
(1) $mode 值 'r' , 表示只读方式打开,将文件指针指向文件头.
(2) $mode 值 'r+' , 表示读写方式打开,将文件指针指向文件头
(3) $mode 值 'w', 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之
(4) $mode 值 'w+', 读写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之
(5) $mode 值 'a', 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之
(6) $mode 值 'a+', 读写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之
- 举例说明
(1) 案例1
(2) 第二个案例(覆盖写)
(3) 第三个案例
- 使用file_put_contents完成任务
推荐大家使用file_put_contents函数.
2.7 删除文件
- 基本:当我们不需要某个文件,尤其是大文件,需要定位清理.
- 使用unlink函数.
- 演示案例
2.8 修改文件
(1) 修改文件的内容,其实就是前面讲过的写入新内容.
(2)修改文件名.rename
(3) 细节
说明: 如果希望正确保存中文名的文件,则需要进行转码操作.
2.9 操作文件目录( 文件夹)
- 案例1-创建一级目录
- 案例2-创建多级目录
创建 d:/tnweb2/aaa/bbb/ccc/ddd
- 删除目录
2.10 课堂练习题讲评
参考胡同学写的代码.
2.11 文件编程的应用案例
- 如何拷贝一张图片
- 代码
- 经典案例1-遍历某个文件夹,判断该文件夹下的内容分别是目录还是文件?
先介绍两个重要的函数
(1) opendir 和 readdir
opendir : 打开一个目录句柄,可用于之后的 closedir(), readdir() 和 rewinddir() 调用中
举例说明 :
(2) 写一个函数统计某个目录所有文件的大小!(包括子目录)
代码 :
(3) 删除某个目录(该目录下有文件和文件夹)
(4) 把某个目录的所有文件(包括子目录和其文件)拷贝到其它目录下
<?php header('content-type:text/html;charset=utf-8'); //copy 整个目录 //DS就是目录分隔符号 define('DS', DIRECTORY_SEPARATOR); $path='e:/hspweb'; //这个 $desc目录可以不存在,也可以存在, 会把 e:/hspweb/ 目录 //下的所有文件及其子目录拷贝到 指定目录 $desc下 [注:只含e:/hspweb本身这个目录名] $dest='d:/mymvc'; copy_r($path,$dest); echo 'ok'; //$path 源目录 $dest 目标目录 function copy_r( $path, $dest ) { if( is_dir($path) ) { //创建目标目录 @mkdir( $dest ); //scandir 就是获取到$path目录下的所有的文件和目录 //放入 $objects 中,他是组数 $objects = scandir($path); if( sizeof($objects) > 0 ) { foreach( $objects as $file ) { if( $file == "." || $file == ".." ) continue; // go on if( is_dir( $path.DS.$file ) ) { copy_r( $path.DS.$file, $dest.DS.$file ); } else { copy( $path.DS.$file, $dest.DS.$file ); } } } return true; } elseif( is_file($path) ) { return copy($path, $dest); } else { return false; } }
- 额外的说明一下 . 和 ..
看:
(1) 不管是windows还是linux/unix操作系统每个目录下都有 . 和 ..
(2) 一般情况下,操作系统会隐藏这个两个目录
(3) . 和 .. 我们应该理解成他们不是真实目录, 而是分别代表 . 代表当前这个目录, ..代表上一级目录.
(4) 可以联合使用 比如,我们希望找到当前目录的上一级目录 ../ ../../
2.12 作业练习
练习题
- 遍历显示某个文件夹下所有的文件和目录名 /
- 编写一个程序,要求如下: (这个课上练习!)
(1) 编写一个Dog类
(2) 创建3个Dog对象,然后序列化存放到 d:/dog文件夹下
(3) 通过遍历d:/dog 可以反序列化所有的Dog对象