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标签实现
<a href=”要下载的文件名”>文件名</a>
缺陷
1)文件类型有限
2)不屈安:完全的暴露了文件在做事器存在的路径,文件名等等
PHP实现下载
header(\"大众Content-type: application/octet-stream\"大众):见告浏览器,做事器接下来发送的文件是二进制流文件,不用进行解析
header(\"大众Content-Disposition: attachment; filename=filename\公众 ):对做事器的文件进行重命名