重蔚php学习第二十九天——文件的操作

2022-10-11 21:31:41 206 0
魁首哥

文件的操作

对文件内容的增删改查,就是对文件的操作。

不只是针对具体文件,还包含目录操作。

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” ):对服务器的文件进行重命名

收藏
分享
海报
0 条评论
206
上一篇:Laravel artisan 命令 中文解释 下一篇:让PHP7达到高性能的几个Tips,学会一个受用无穷

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码