文件的操作
对文件内容的增删改查,就是对文件的操作。
不只是针对具体文件,还包含目录操作。
1)为什么要操作文件?
1.进行服务器文件的管理,删除无效的或者已经不再使用的文件
2.配置文件(XML配置文件),对文件的修改
3.小数据内容,不经常修改的内容会存放到文件里,如果需要就从文件里读出数据,对文件查找
4.文件的上传就是对文件的新增管理,当文件上传量很大的时候,需要对文件进行分层管理,需要系统帮忙创建文件夹,对文件的新增
2)哪些地方会应用到文件操作?
保存不经常变化数据量小的数据:小型数据库的使用
配置文件:配置文件的变更
流量统计:统计网站的用户访问量和访问时间以及IP地址
静态网页生成:大型网站优化
文件下载:读取文件内容,并返回给用户
目录操作
文件目录的操作,先得到一个目录资源
resource Opendir($dir):打开一个目录
1.得到一个目录
2.判断是否是一个目录
3.打开该目录
4.打开成功则返回一个资源,打开失败返回false,但是会报错
Readdir(resource $res):读取目录资源里的文件,每次读取一个,指针操作
Rewinddir(resource $res):重置目录资源指针
Closedir(resource $res):关闭目录资源
目录资源处理流程
当指针指向最后一个之后会怎么办?
如果已经读不到文件名了,会返回false
Scandir(目录名字):遍历指定的目录,将其中所有(一层)文件和文件夹全部得到,并以数组形式返回。
文件判断
file_exists:检查文件或目录是否存在
is_dir:判断当前给定的地址是否是一个目录
is_file:判断当前给定的地址是否是一个文件
mkdir:创建一个文件夹(目录)
注意:通常在创建文件夹之前都需要对文件夹进行判断,判断其是否存在;
rmdir:删除一个文件夹(目录),尝试删除 dirname
所指定的目录。 该目录必须是空的,而且要有相应的权限。成功时返回 TRUE
, 或者在失败时返回 FALSE
.
getcwd:取得当前工作目录,不一定当前文件所在目录,也不一定是用户打开文件目录指定的目录(如果当前文件没有修改工作目录,那么工作目录是当前文件所在的目录)
chdir:改变当前工作目录
当工作目录被修改之后,那么相对路径也就改变了,变成当前指定的工作目录所对应的相对目录
自定义目录遍历功能
能够循环遍历文件目录里的所有文件,如果碰到文件夹,则进入文件夹读取文件夹里的子文件,输出,文件夹用红色表示,文件用蓝色表示;要能看出父子关系
递归
最简单的理解:一个函数在自己内部调用自己
递归调用原理
代码
需求:做一个 函数调用 计数器,函数没调用一次,计数器+1;
Global原理
代码
以上方式可以实现计数器功能,但是当多个函数都需要计数器的时候,就可能出现冲突。而且需要在外部定义全局变量,比较麻烦。
有没有办法能够在函数里面定义变量,来记住函数的调用次数呢?
PHP提供了一种机制: 静态变量
1.当函数第一次执行的时候,系统会在静态变量区分配一块内存,用来保存静态变量,并对静态变量进行初始化
2.当函数之后再次执行的时候,系统会去静态变量区,找当前函数需要定义的静态变量,发现存在就不再进行初始化,而是直接调用
语法:static $变量名 = 值;
静态变量在函数中存在的原理
自定义遍历目录
递归:因为子文件夹跟父文件夹的遍历是一样
代码见demo10_myScandir.php
Str_repeat():将 字符串 按照指定的数据进行重复拼接,然后返回
Str_repeat(‘a’,3) =====è’aaa’
注意:文件夹的遍历,系统会对文件夹内的所有文件先进行排序,排序的方式是按照字符的从小到大排序
A.php,b.php,10.php,2.php,11.php
排序之后
10.php,11.php,2.php,a.php,b.php
上面的代码已经实现了输出,但是需求变更,要求实现像scandir那样得到一个数组,不输出,并且返回该数组。
文件操作
文件的操作,通常指的是对文件的增删改查。
具体到操作上就是:读和写
PHP有版本差异
新版本5以后文件操作变得非常简单
file_get_contents:从指定的文件里获取所有内容(一次性读入)
注意:如果给定的路径错误,系统提示文件找不到从而报错
file_put_contents:向一个文件里面写入内容,文件如果不存在,则创建该文件
FILE_APPEND:追加,在原来文件的内容末尾添加内容
FILE_USE_INCLUDE_PATH:覆盖原来内容,从第一位开始写
File:将一个文件的内容全部读出,一行一行的读,每读到一行,将这行放到数组的一个元素当中,返回一个数组
PHP5之前文件操作
Fopen:打开一个文件,返回该文件资源
Mode
R:readonly,只读,采用该方式打开文件,只能读取其中的内容,不能写,文件指针在文件第一位
r+:读写,可以对文件进行写操作,直接将文件指针放到第一位
以上两种方式都不能去打开一个不存在的文件
w
w+
a
a+
Fgetc:从文件资源中读取一个字符
Fgets:从文件资源中读取一个字符串,指定长度(不是指定多长就一定能读多长,如果长度超过一行,就只读取该行):读一行或者指定长度
Fread:从资源中读取指定长度的数据
以上三个读,都会在读完之后,将指针指向下一位
Fputs:往文件中插入一个字符串,是fwrite的一个别名
Fwrite:往文件中插入一个字符串
Fclose:关闭文件资源
Fseek:设置文件资源的指针,不是重置指针,而是指定指针的位置(需要用户自己设定)
文件的指针第一位对应的索引是0
文件相关函数
Copy:复制
Unlink:删除文件
Rename:对文件进行重命名
Filemtime:文件最后修改的时间
缓存技术
AJAX
Filesize:文件大小
Fileperms:文件权限,以八进制形式返回
文件下载
在浏览器端将文件以附件的形式打开
哪里用到文件下载?
迅雷,bt,电驴,华军,太平洋
文件下载对于服务器来讲,跟普通文件的打开和输出是一回事。
如何实现下载?
服务器告诉浏览器该文件是一个附件,不要直接打开或者解析,应该当做附件来保存处理
下载有两种方式
Html使用a标签实现
缺点
1)文件类型有限
2)不安全:完整的暴露了文件在服务器存在的路径,文件名等等
PHP实现下载
header (“Content-type: application/octet-stream”):告诉浏览器,服务器接下来发送的文件是二进制流文件,不用进行解析
header(“Content-Disposition: attachment; filename=filename” ):对服务器的文件进行重命名
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~