PHP文件管理系统

一个完整的网站项目,离不开对文件、文件夹的一些操作,本节主要来学习如何使用php访问文件、读取文件、写入文件、操作文件夹(目录)。下面会用到一些php内置的函数,大家可以参考以下技术文档,对该函数大致了解一下。

技术文档:PHP文件系统

首先我们使用VS Code新建一个文件夹lesson3,并在里面新建一个poem.txt文件,将下面这首诗复制到txt文件里面。

在读取一个文件之前,我们需要先判断文件是否存在、是否可读,减少程序的错误。如果文件不存在,我们的程序虽然是正确的,但是同样会报错。如果文件不可读,比如权限不够、文件的格式存在问题等等,程序同样也打不开文件。所以我们要有良好的编程习惯,缜密的思维把程序报错的可能性降低。

判断文件是否存在

我们可以在技术文档PHP文件系统找到file_exists()函数是用来判断文件或文件夹是否存在的,我们查看文档可以看到file_exists()函数的用法:

这里的bool是说这个函数返回的数据类型为布尔型Boolean,布尔型只有两个值就是TRUE和FALSE,可以用于条件判断

我们来实战一下该函数。使用VS Code在lesson3的文件夹里新建一个exist.php文件,并输入以下代码:

了解一个函数返回的数据类型是比较重要的,比如只有数据类型为布尔型时,才能作为条件语句的条件判断,其他数据类型就不可以哦。

使用PHP打开文件

我们还是在技术文档PHP文件系统找读取文件的函数,找到fopen()是用来打开文件和URL链接的。fopen()函数的语法如下:

从语法之中,我们可以看出fopen()函数返回的是数据类型的资源类型resource,文档、数据库、链接等都可以资源类型。而这里的mode是访问文件的模式。访问文件的模式的具体知识大家可以查阅文档,这里只列出常用的两种方式

  • r,只读方式打开
  • wb,是写入方式打开

文件使用fopen()打开操作完之后,必须要关闭关闭的函数为fclose(),fclose()返回的数据类型是布尔型。

文件不能打开就抛出异常提示

die()函数输出一个消息并且退出当前脚本,当fopen()函数取到了文件,就不会执行 die(),当fopen()函数没有取到文件就会执行die()。die()函数经常与or 一起连用。

又是打开函数,又是打开的模式,又是关闭函数,又是报错,咋感觉这么复杂?大家在编写函数的时候,要有一个流程的感觉,每个步骤对应一个特定的函数,千万不要去死记。

使用die()函数,自定义一些报错信息等都是非常有效的错误处理机制。在编写php脚本和 web 应用程序时,错误处理是一个重要的部分。如果代码缺少错误检测的编码,那么程序看上去很不专业,既不安全也不利于代码错误的查找。

使用PHP读取文件

使用php读取文件指定字符数的内容

fread()函数用于读取文件,它的语法如下:

fread()函数有两个变量,第一个变量必须是资源类型resource,第二个变量必须是整数,也就是读取文件前多少个字节。fread()函数返回的是字符串类型。

一个汉字以及中文标点符号是3个字符,当少了一个字符的时候,会显示为乱码。

使用php读取整个文件

如果要读取整个文件该怎么办呢?按照fread()函数的理解,如果我们知道了整个文件的字节数,那不就可以读取整个文件啦?filesize()就是来返回文件的字节数的函数。

而filesize()函数返回的也是整型。

获取文件的属性

我们希望我们可以通过函数呈现的方式而不是GUI的界面来了解一个文件的属性,比如文件名、大小、类型、修改时间、上次访问时间等信息,这些都可以使用php来实现,而实现这些功能的函数我们也不需要死记,打开技术文档PHP文件系统去找即可。

  • basename()函数— 返回路径中的文件名部分
  • filesize()函数 — 取得文件大小
  • filetype()函数— 取得文件类型
  • fileatime()函数— 取得文件的上次访问时间
  • filectime()函数— 取得文件的 inode 修改时间

在lesson3文件夹下新建一个文件attribute.php,然后输入以下代码:

写入数据

我们可以在技术文档PHP文件系统找到fwrite()函数用来写入文件的。我们先在lesson3文件夹下新建一个note.php的文件,然后在note.php里输入以下代码:

然后再用浏览器打开note.php文件执行代码,我们会发现在文件夹下面会多了一个note.txt的文件,打开note.txt文件,我们就可以看到我们要输入的诗句啦。

如果报错,大家可以根据报错的提示去解决它,可能有些电脑会出现权限不够的问题,大家可以自行百度解决。

重命名文件和文件夹

我们可以在技术文档PHP文件系统找到rename()函数用来重命名文件或文件夹。我们在lesson3文件夹下面新建一个oldname.txt文件,然后再新建一个rename.php文件,输入以下代码:

大家可以自行写一个更改文件夹名的php脚本,只需要注意$file所赋的值要是文件夹,而rename的名称也是文件夹名就可以啦。

创建文件夹

操作文件夹,PHP也有相关的函数,我们可以根据需要在技术文档里面查找相关函数的用法。

技术文档:PHP目录函数

mkdir函数用来新建文件夹(目录),mkdir()函数的语法如下:

mkdir()函数返回的也是一个布尔型,mkdir()函数只有一个必填变量就是文件的路径名。

注意!file_exists($dir)这里是一个逻辑非!运算符,表达的意思是如果文件夹不存在,创建文件夹的条件才成立。

操作文件夹

操作文件夹和操作文件有点类似,同样是先打开目录,然后读取目录,再关闭目录,要执行这样的操作,我们需要先了解到PHP的目录函数。

  • opendir — 打开目录
  • closedir — 关闭目录
  • readdir — 从目录中读取条目

readdir只能获取文件夹的一级目录下的所有文件和目录,也就是说如果lesson3下面新建了二级目录,那readdir是获取不到二级目录的文件目录的。

遍历目录

列出文件或文件夹

scandir()函数用于列出指定路径中的文件和目录,scandir()函数的语法如下:

从语法上我们可以看出scandir()函数返回的是数组类型,要直接输出数组类型我们就需要用到print_r()了。

遍历文件夹里所有的文件

  • is_file函数:— 判断给定文件名是否为一个正常的文件
  • is_dir函数:— 判断给定文件名是否是一个目录

本节任务

  1. 结合PHP的PHP文件系统文档掌握如何使用PHP打开文件、读取文件、关闭文件;
  2. 结合PHP的PHP目录函数文档掌握如何使用PHP打开文件夹、读取文件夹、关闭文件夹;