PHP文件操作

文件操作:对文件的增删改查。(文件夹也是文件)

为什么要使用文件操作?
1.有一些数据:不经常被修改,但是又经常被使用,数据量小,使用文件来保存数据(配置文件,xml文件,session文件)
2.系统日志文件:把一些系统错误,保存到日志文件供管理员或者程序员去分析。


文件目录的操作

对文件操作必须先找到对应的路径。

文件操作步骤
1.得到文件路径对应的资源
opendir:打开一个目录,需要一个路径参数,返回一个资源

这里写图片描述

2.需要从资源里获取对应的数据
readdir:读取,从资源里读取一个对应文件,当前文件指针所指向的文件,将文件指针下移一位。返回当前文件的文件名字或者FALSE。可以显示的使用资源参数,也可以不提供,因为系统会向上自动寻找文件路径资源。

这里写图片描述


目录相关函数

rewinddir:重置目录资源的指针,回到第一个文件(.文件)

这里写图片描述

closedir:释放目录资源

这里写图片描述

scandir:浏览器目录,把所有的文件都获得,并存放到一个数组返回

这里写图片描述


遍历目录

1.获得路径资源
2.逐个的读取文件信息
3.关闭资源

这里写图片描述


目录操作原理

opendir所做的事情
1.找到对应的目录
2.将目录中所有文件全部读入到内存(包含子文件夹下的所有文件)
3.将目录指针指向第一个文件

readdir所做的事情
1.读取当前指针所指向的文件的文件名
2.将目录指针向下移动一位

这里写图片描述


文件相关函数

file_exists:判断文件是否存在。存在返回TRUE,不存在返回false

这里写图片描述

is_dir:判断给定的路径是否是一个路径,如果是路径返回TRUE,否则返回false

这里写图片描述

is_file:判断给定的路径是否是一个文件,如果是文件返回TRUE,否则返货false

这里写图片描述

mkdir:创建文件夹,不能创建同名文件夹(Linux下:必须保证当前文件夹有PHP所在组有权限进行写操作)

这里写图片描述

rmdir:删除文件夹

这里写图片描述

getcwd:获取当前操作目录

这里写图片描述

chdir:改变当前操作目录,代表进入到目标目录

这里写图片描述

这里写图片描述


遍历所有文件夹及子目录

1.得到一个路径
2.获得路径资源
3.获取指针所指向文件名
4.判断当前文件是否是一个路径
a)如果是路径:进入到子目录(改变工作路径)
b)如果是文件:直接输出
5.关闭资源


递归

在函数内部调用函数本身。
函数用来解决某一类问题,在函数的内部又碰到了与之前碰到的一样的问题,接下来调用函数本身来解决该子问题。重点内容

需求:32个球,外形完全一样,有一个球比其他31个都轻。有一个天平。
问题:使用几次可以找出这个球?
1.32个分成两半,其中有一半比另外一半轻。
2.16个分成两半,其中有一半比另外一半轻。
3.。。。
4.2个分成两半,其中有一个比另外一个轻。 ——–》找到目标

$num = 32;
while($num>= 2){
$num = $num /2;
}
echo $num;

语法:
定义一个函数
function iterate(){
   //判断
   if(条件与父问题一致){
      //调用函数本身
   iterate();
   }
  }

//调用函数
iterate();

递归调用:
递归点:当前碰到的子问题与父问题一致
递归出口:已经不存在递归点,而应该结束的地方

这里写图片描述



递归原理

这里写图片描述


文件操作

对文件内容的增删改查。

在PHP4以后,PHP提供了非常简单的函数来操作文件内容
file_get_contents():获取文件的全部内容

这里写图片描述

file_put_contents():向某个文件写入内容

这里写图片描述

注意:
1.file_put_contents能够将内容写入到文件中
2.如果文件不存在,则会新建一个对应的文件
3.file_put_contents默认的会覆盖原来文件的内容进行写入

这里写图片描述

file_put_contents第三个参数用来设定是否覆盖原来的文件内容
FILE_USE_INCLUDE_PATH:表示会覆盖原来的数据
FILE_APPEND:在后面追加数据

这里写图片描述

file_get_contents不但能读取本地文件,还可以通过http协议去访问互联网上的文件

这里写图片描述

file:把整个文件读入一个数组中,返回一个数组(数组的每一个元素都是文件中的一行数据)

这里写图片描述

PHP4以前的文件操作方式。
fopen:打开一个文件,返回一个资源
Mode[r,r+,w,w+,a,a+]

这里写图片描述

这里写图片描述

fgetc:c代表charcater,一次获取一个字符,指针下移一位

这里写图片描述

fgets:s代表string,一次获取一行(要么获取指定长度,要么获取一行)

这里写图片描述

fread:读取指定长度是数据

这里写图片描述

fputs:就是fwrite的替身
fwrite:往文件里写入内容
写内容的时候,会覆盖原来位置的内容,内容会被重写

这里写图片描述

fclose:关闭文件资源

这里写图片描述

fseek:重置指针的位置,需要用户自己指定位置

这里写图片描述

fopen中w与w+的区别测试

这里写图片描述


文件操作相关函数

copy:拷贝,会保存原文件
unlink:删除文件

这里写图片描述

rename:重命名文件

这里写图片描述

filemtime:m代表modify,修改的意思,获取文件最后被修改的时间

这里写图片描述

filesize:获取文件的长度

这里写图片描述

fileperms:获取文件的权限(主要针对Linux),返回是一个八进制结果

这里写图片描述


文件下载

文件下载分为两种方式
html的a标签实现:

这里写图片描述

a标签实现下载的缺点:
1.导致服务器会自动解析相关文件(如果服务器能够识别)
2.路径是文件在服务器存在的真实路径,所以导致不安全

PHP实现下载:
header(“Content-type: application/octet-stream”):当前PHP输出给浏览器的数据是流式文件,浏览器不要解析(其实就是下载的意思)
header(“Content-Disposition: attachment; filename=filename”):对文件进行伪装,文件变成一个普通的附件并进行重命名

PHP下载原理
1.通过header设置告诉浏览器,接收到内容之后不要解析,应该当做附件处理
2.输出对应的数据即可。

这里写图片描述


函数调用计数器

计算出函数被调用了多少次。

1.传入参数,参数使用引用传值:对外部变量的引用
2.$GLOBALS和global都可以

要解决的问题:函数内部定义变量能够在其他的被调用的函数(同一个函数)中能够认可

静态变量:在函数中定义,但是在函数再次调用时,不会重新定义,而是使用第一次函数定义的变量。

静态变量:在函数结束之后不会被立即释放
语法:static $变量名 = 值;

这里写图片描述

注意:
1.一个静态变量只会被定义一次
2.静态变量不是存放在局部变量内存中,而是存放在静态变量区(静态变量区不允许定义重复的变量)

这里写图片描述

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...