文件操作
文件内容的增删改查都是对文件的操作。
不仅针对特定文件,还针对目录操作。
1)为什么要操作文件?
1.管理服务器文件,删除无效或不再使用的文件
2.配置文件(XML配置文件),文件的修改
3.数据内容小,不经常修改的内容会存放在文件中,必要时从文件中读取数据,并搜索文件
4、文件上传是文件管理的新方式。 当文件上传量较大时,需要对文件进行分级管理。 系统需要帮助创建文件夹和添加新文件。
2)文件操作会应用在什么地方?
保存不经常变化的数据量小的数据:小型数据库的使用
配置文件:配置文件的更改
流量统计:统计网站用户访问量、访问时间和IP地址
静态网页生成:大型网站优化
文件下载:读取文件内容返回给用户
目录操作
文件目录的操作,首先获取一个目录资源
($dir): 打开一个目录
1.获取目录
2.判断是否为目录
3.打开目录
4.开启成功返回一个资源,开启失败返回false,但会报错
($res): 读取目录资源中的文件,一次一个,指针操作
($res): 重置目录资源指针
($res): 关闭目录资源
目录资源处理流程
当指针指向最后一个时会发生什么?
如果无法读取文件名,则返回false
(目录名):遍历指定目录,获取其中所有(一级)文件和文件夹,以数组的形式返回。
档案判断
: 检查文件或目录是否存在
: 判断当前给定地址是否为目录
: 判断当前给定地址是否为文件
mkdir:创建文件夹(目录)
注意:通常在创建文件夹之前,需要判断文件夹是否存在;
rmdir:删除一个文件夹(目录),尝试删除指定的目录。 该目录必须为空并具有适当的权限。 成功时返回 TRUE,失败时返回 FALSE。
:获取当前工作目录,不一定是当前文件所在目录,也不一定是用户指定打开文件目录的目录(如果当前文件没有修改工作目录,那么工作目录就是所在目录当前文件所在)
chdir:改变当前工作目录
修改工作目录时,相对路径也随之改变,变成当前指定工作目录对应的相对目录
自定义目录遍历功能
它可以循环遍历文件目录中的所有文件。 如果遇到文件夹,则进入文件夹读取文件夹中的子文件,输出,文件夹用红色表示,文件用蓝色表示; 能够看到亲子关系
递归
最简单的理解:函数在自身内部调用自身
递归调用原理
代码
需求:做一个函数调用计数器,如果函数没有被调用一次,计数器+1;
原则
代码
上述方法可以实现计数器功能,但是当多个函数需要计数器时,可能会发生冲突。 而且需要在外部定义全局变量,比较麻烦。
有没有办法在函数中定义变量来记住函数被调用的次数?
PHP提供了一种机制:静态变量
1.函数第一次执行时,系统会在静态变量区分配一块内存,用来保存静态变量,并对静态变量进行初始化
2. 稍后再次执行该函数时,系统会去静态变量区查找当前函数需要定义的静态变量。 如果发现存在,则不再初始化,而是直接调用
语法:$变量名=值;
函数中静态变量的存在原理
自定义遍历目录
递归:因为子文件夹和父文件夹的遍历是一样的
代码见.php
():根据指定的数据重复拼接字符串,然后返回
('a',3) =====è'aaa'
注意:遍历文件夹时,系统会先对文件夹中的所有文件进行排序,排序方式为字符从小到大排序
A.php, b.php, 10.php, 2.php, 11.php
排序后
10.php, 11.php, 2.php, a.php, b.php
上面的代码已经实现了输出,但是需求变了,要求实现要得到一个像那样的数组,不输出,返回数组。
文件操作
对文件的操作通常是指文件的增删改查。
具体到操作是:读写
PHP 有版本差异
新版本5之后,文件操作变得非常简单
:获取指定文件的所有内容(一次性读取)
注意:如果给定的路径有误,系统会提示找不到文件并报错
: 将内容写入文件,如果文件不存在,则创建文件
:,在原文件内容末尾添加内容
H:覆盖原有内容,从头开始写
文件:读取一个文件的所有内容,一次一行,每次读取一行,将这一行放入数组的一个元素中,返回一个数组
PHP5之前的文件操作
fopen:打开一个文件并返回文件资源
模式
R:,只读,这种方式打开文件,只能读取内容,不能写入,文件指针在文件首位
r+:读写,可以写入文件,直接把文件指针放在最前面
以上两种方法都不能打开不存在的文件
w
w+
A
一个+
fgetc:从文件资源中读取一个字符
fgets:从文件资源中读取一个字符串,指定长度(指定长度就可以读取,如果长度超过一行,只读取该行):读取一行或指定长度
fread:从资源中读取指定长度的数据
上面的3次读取都会把指针指向读取后的下一位
fputs:向文件中插入一个字符串,yes的别名
: 在文件中插入一个字符串
: 关闭文件资源
fseek:设置文件资源的指针,不是重置指针,而是指定指针的位置(需要用户自己设置)
文件指针第一位对应的索引为0
文件相关函数
复制:复制
:删除文件
: 重命名文件
: 文件最后修改的时间
缓存技术
阿贾克斯
:文件大小
: 文件权限,八进制返回
下载文件
在浏览器端以附件形式打开文件
在哪里使用文件下载?
迅雷、bt、电驴、华军、太平洋
对于服务器来说,文件下载与普通文件的打开和输出是一样的。
如何实现下载?
服务器告诉浏览器该文件是附件,不要直接打开或解析,应作为附件保存处理
有两种下载方式
html使用一个标签来实现
文件名
缺点
1)有限的文件类型
2)不安全:完全暴露文件在服务器上的路径、文件名等。
PHP实现下载
("-type: /octet-"):告诉浏览器服务器接下来发送的文件是二进制流文件,不需要解析
("-: ; ="): 重命名服务器上的文件