文件系统的概述

任何类型的变量在运行的时候都是将其加载到内存里面。但是内存有一个特点:CPU读取内存的速度很快,但是一旦断电,内存里面的数据就会消失。如果要持久的保存数据,有两种方法:将数据存储到数据库或者存储到文件里面。

文件的处理一般包括:创建,编辑,复制,粘贴,删除,上传和下载。

PHP里面对文件的操作是基于UNIX系统的。所以在PHP里面文件相关的操作函数有很多是类似于UNIX Shell命令。Windows操作系统里面没有提供那么多像UNIX系统提供的文件操作函数,但是大部分函数功能是兼容。

文件类型

在PHP里面,文档类型有7种(基于UNIX系统),如果是基于Windows系统,文件类型只有3种。

在UNIX系统下面文件类型有7种:fifo,char,dir,block,link,file 和 unknown。

如下表:

文件类型

描述

fifo

命名管道,用于将信息的一个进程传递到另一个进程

char

字符设备

Dir

目录类型

Block

块设备类型

Link

符号链接,是指向文件的指针

File

普通文件类型

unknown

未知类型

在Windows系统下面文件类型只有3种:dir,file,unknown

在PHP里面有一个函数可以查看文件的类型filetype()

该文件位于C盘下面

结果:

接下来来一个file类型

该文件也位于C盘下面

结果:

这里补充一个file_exists()函数:判断文件是否存在

除此之外,还有一组判断文件是否为某一个类型的函数

is_file()  is_dir()

文件属性

在操作文件的时候,我们往往需要获取文件的相关属性,例如:文件的大小,文件的创建时间,文件的访问时间

如下表:下面的函数接收的参数都是文件所在的路径

函数

功能

返回值

file_exists

判断文件是否存在

返回true或者false

filesize()

获取文件大小

返回字节数

filectime()

获取文件的创建时间

返回一个时间戳

filemtime()

获取文件的修改时间

返回一个时间戳

fileatime()

获取文件上次访问的时间

返回一个时间戳

is_readable()

判断文件是否可读

返回true或者false

is_writeable()

判断文件是否可写

返回true或者false

is_executable()

判断文件是否可以执行

返回true或者false

is_file()

判断是否为文件

返回true或者false

is_dir()

判断是否为目录

返回true或者false

stat

获取文件大部分信息

返回一个装有文件大部分信息的关联数组

接下来我们把上面的函数全部走一遍:

文件存在于C盘下:

结果:

stat()函数:返回的是一个关联数组,数组里面装有关于文件的信息

效果:

具体数组元素的含义,我们可以参照手册:

这些属性在UNIX上面用的比较多,在Windows上面,没有uid,gid,blksize和blocks这些属性,所以在windows下默认值是0或者-1

目录的相关操作

目录的路径

路径可以分为绝对路径和相对路径

绝对路径:所谓绝对路径,就是指从根目录下面一层一层往下找。最后找到需要找的目录或者文件

相对路径:从当前的目录开始找,进入某一个目录,最终找到需要的文件或者目录

绝对路径和相对路径示例:

在UNIX系统下面,支持的路径分隔符为/   但是在Windows系统下面的路径分隔符为\,但是需要使用转义字符\对\进行转移,如下:

但是Windows系统支持使用/作为路径分隔符,为了兼容和更好的移植,一般就使用/作为路径分隔符

除了使用/作为路径分隔符以外,还有一个常量也可以作为路径分隔符,DIRECTORY_SEPARATOR

通常在做开发的时候,将目录的各个部分分隔开是很有用的。例如:取得文件的扩展名,取得文件所在的目录。basename(),dirname(),pathinfo()

basename():返回路径中的文件名部分。该函数接收两个参数,第一个是路径,第二个是文件的类型,如果传入第二个参数,则不显示文件的扩展名。

dirname():和basename()函数的作用刚好相反,获取文件的目录部分

pthinfo():返回一个关联数组,数组里面装有传入路径的目录名,传入路径的文件名,文件扩展名,和去掉扩展名的文件

遍历目录

对服务器下面的某一个目录进行浏览,通常称之为遍历目录。可能需要用到的函数如下:

opendir():打开指定的目录

closedir():关闭指定的目录

readdir():读取指定目录,返回当前的目录并且指针位置移动到下一位,当指针移动到末尾无法再移动的时候,返回false

rewinddir():倒回目录,将目录指针移动到目录开始的位置

遍历目录示例:

该目录位于C盘下面的test目录

效果:

通过观察我们发现:多了两个目录,分别是.和..

(重要)每一个目录下面默认都存在这两个目录,.代表当前目录,..代表上一级目录,所以我们在对目录进行操作的时候,一定要注意排除这两个多余目录

还有一个glob()函数:作用也是用来遍历目录,返回一个包含检索结果的数组

效果:

示例2:检索该目录下所有的txt文档

统计目录大小

在PHP里面有两个函数:disk_free_space()和disk_total_space()

disk_free_space():统计磁盘的剩余空间

disk_total_space():统计磁盘的总大小

统计出来的磁盘大小的单位为字节

但是,如果要符合平时查看磁盘大小的习惯的话,就需要将字节转换为对应的大小

转换代码如下:

在PHP里面,没有统计目录大小的函数,所以这个函数需要我们自己写

这里我们自己写一个函数,假设函数名为dirSize,该函数应当接收的参数为目录的路径

统计目录大小函数代码如下:

建立和删除目录

建立目录非常简单,PHP给我们提供了建立目录的函数mkdir(),该函数接收一个参数:想要建立目录的路径

效果:

删除目录

删除目录PHP系统也给我们提供了相应的函数rmdir()。接收一个参数,参数为要删除目录的路径

如下:

但是rmdir()函数只能删除空目录,如果目录非空,那么无法直接删除

通过unlink()函数可以删除某一个文件

所以如果要删除不为空的目录,又需要用到递归方法去遍历每一个目录,删除目录下面的文件,代码如下:

复制目录

PHP系统也是为我们提供了一个拷贝文件的函数:copy()函数

该函数接收两个参数(源文件的路径,目标文件路径)

如果目标文件已经存在,则会被覆盖掉

效果:

但是PHP里面并没有提供目录的复制函数,所以需要我们自己书写目录复制的函数

复制目录示例:参见dirCopy.php文件

移动目录

PHP里面提供了一个rename()函数,可以对目录和文件进行移动,并且移动的时候还可以重命名,非常好用,示例:

效果:

PHP中的文件操作的更多相关文章

  1. 第32课 Qt中的文件操作

    1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操 ...

  2. 重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作

    原文:重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 [源码下载 ...

  3. 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体

    [源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...

  4. 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理

    [源码下载] 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理 作者:webabcd 介绍背水一战 Windows 10 ...

  5. Java中的文件操作(一)RandomAccessFile

    今天,学到的是java中的文件操作. Java.IO.File Java中操作文件用到RandomAccessFile类,既可以读取文件内容,也可以向文件输出数据,但不同与普通输入/输出流的是Rand ...

  6. Win 32平台SDK中的文件操作

    读取文件: HANDLE hFile ; // 声明文件操作内核对象句柄 hFile = CreateFile(, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ...

  7. ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

    做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path ...

  8. 关于Python中的文件操作(转)

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

  9. 说说Python 中的文件操作 和 目录操作

    我们知道,文件名.目录名和链接名都是用一个字符串作为其标识符的,但是给我们一个标识符,我们该如何确定它所指的到底是常规文件文件名.目录名还是链接名呢?这时,我们可以使用os.path模块提供的isfi ...

  10. C#中的文件操作

    在.NET Framework 中进行的所有输入和输出工作都要用到流(stream) 有两种类型的流: 输出流:当向某些外部目标写入数据时,就要用到输出流(将数据写入到文件中). 输入流:用于将数据读 ...

随机推荐

  1. 值域线段树 bzoj 4627

    这是题目链接4627: [BeiJing2016]回转寿司 题目大意: 给定n个数,求有多少个字段和在 满足 L<=sum<=R; 解题思路 需要解这个题目,需要有线段树加可持续化的思想, ...

  2. [转载]Dalvik指令集

    这篇文章是转载的,为了便于查找一些指令,贴在这里. 转自:http://blog.csdn.net/canfengxiliu/article/details/20144119 ------------ ...

  3. [LeetCode] Longest Valid Parentheses -- 挂动态规划羊头卖stack的狗肉

    (Version 1.3) 这题在LeetCode上的标签比较有欺骗性,虽然标签写着有DP,但是实际上根本不需要使用动态规划,相反的,使用动态规划反而会在LeetCode OJ上面超时.这题正确的做法 ...

  4. HDU2896(AC自动机入门题)

    病毒侵袭 Time Limit:1000MS     Memory Limit:32768KB   Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这 ...

  5. bzoj4006

    斯坦纳树 比之前要求高了一些 其实利用斯坦纳树的dp[i][s]以i为根,S为状态就行了,先跑一遍斯坦纳树,预处理出dp数组,记住每个S的最小值,然后再dp,这里dp必须要求同一种颜色的状态都必须在S ...

  6. 算法导论17:摊还分析学习笔记(KMP复杂度证明)

    在摊还分析中,通过求数据结构的一系列的操作的平均时间,来评价操作的代价.这样,即使这些操作中的某个单一操作的代价很高,也可以证明平均代价很低.摊还分析不涉及概率,它可以保证最坏情况下每个操作的平均性能 ...

  7. java中有关socket通信的学习笔记

    最近做的项目中使用到了一些基于java的socket长连接的一些功能,用来穿透有关行业的网闸.用到了也就学习了一下,下面是对学习内容的一个笔记,记录一下也希望有兴趣的同学可以参考一下,加深对javas ...

  8. 揭开 iOS 7 之 Multipath TCP 的面纱(转)

    看到中文圈似乎讨论 iOS 7 的这个特性的还不多,于是我稍微研究了一下这个「Mutlipath TCP」,写点心得.过程是这样的: Olivier Bonaventure 通过 Wireshark ...

  9. ORA-22992:没法使用从远程表选择的LOB定位器

    OLB 问题 ORA-22992:没法使用从远程表选择的LOB定位器 Create global temporary table temp on commit preserve rows as sel ...

  10. C#中的explicit和implicit了解一下吧

    今天在研究公司项目框架的时候看到了下面的用法,public static implicit operator JsonData(int data);.貌似很久没用过这种隐式转换的写法了,因此重新温习一 ...