文件系统函数

在编程语言中,我们避免不了要与文件打交道,比如要将本地文件上传至服务器,创建读取日志文件等,其中涉及了各种文件操作。在 PHP 中,我们可以使用其丰富的文件系统函数处理这些功能,它是数据存储的主要手段。

本章节列出截至PHP 7.3.6所有的文件系统函数以供参考。

下表以相关性排序。

函数名 描述
file_exists() 检查指定的文件或目录是否存在,存在则返回TRUE,不存在则返回FALSE
fopen() 打开一个指定的文件或 URL。 如果 PHP 的allow_url_fopen未被打开,那么打开一个 URL 时fopen()调用失败
fread() 读取指定长度的通过fopen()函数打开的文件内容
fwrite() 将数据写入到指定文件,在写到指定长度的数据或者写完所有数据时停止运行
fputs() 函数fwrite()的别名。将数据写入到指定文件,在写到指定长度的数据或者写完所有数据时停止运行
unlink() 删除指定文件
fgetc() 从文件指针处读取一个字符(英文字符),同时文件指针向后移动一位,如果遇到文件末尾则返回FALSE
fgets() 从文件指针处读取一行字符,直到遇到换行符、文件末尾或者函数参数列表中指定的长度($length - 1)后停止
fgetss() 从打开的文件句柄中读取一行字符,并尝试过滤掉 HTML 和 PHP 标签,直到遇到换行符、文件末尾或者函数参数列表中指定的长度($length - 1)后停止
fgetcsv() 从文件指针处读取一行字符,直到遇到换行符、文件末尾或者函数参数列表中指定的长度($length - 1)后停止,并对行中的 CSV 字段进行解析
fputcsv() 将一个数组格式化为CSV后写入通过函数fopen()打开的文件句柄
fscanf() 以特定格式来匹配已打开的文件句柄中的一行字符串,每个格式按空白符(包括制表符)隔开,最后返回按格式解析后的数组结果
ftruncate() 把已打开的文件句柄截断为指定长度
file() 将文件读入数组。返回以文件行号为索引的数组
feof() 检测文件指针是否指向文件末尾(EOF)
fpassthru() 从当前文件指针开始,读取剩余的所有数据,并把结果写在输出缓冲区(直接输出结果)
fseek() 重新定位文件指针,定位值从$whence开始,单位为字节数,可以定位至文件末尾之后
ftell() 返回当前文件句柄的指针位置
fstat() 返回通过fopen()函数打开的文件句柄的本地文件的信息
rewind() 将已打开的文件句柄指针重置至文件头
flock() 为解决多进程对同一文件的读写冲突操作而产生(即使 PHP 多线程的支持度几乎为 0 )。它对一个文件进行简单的锁定/释放操作
tmpfile() 以读写(w+)的形式创建一个没有文件内容、只有一个唯一的文件名的临时文件
fclose() 关闭通过fopen()fsockopen()函数打开的文件句柄
popen() 打开一个指向进程的管道,只允许单向的读或者写
pclose() 关闭使用popen()函数打开的文件进程句柄
file_get_contents() 将文件整个(一次性)写入一个字符串
file_put_contents() 将一个字符串写入文件
tempnam() 在指定目录中,生成一个具有指定前缀的唯一性文件名的空白文件,并在成功时返回该文件名
dirname() 返回文件所在目录
disk_free_space() 获取一个本地目录或盘符所在磁盘的剩余可用空间
diskfreespace() 函数disk_free_space()的别名。获取一个本地目录或盘符所在磁盘的剩余可用空间
disk_total_space() 获取本地目录所在磁盘的总字节数
mkdir() 创建一个目录
rmdir() 删除一个指定的空目录
rename() 对指定文件或目录进行重命名
move_uploaded_file() 将通过HTTP POST上传的文件移动到新的位置
copy() 复制一份文件到指定位置
basename() 返回一个路径参数的基本文件名(不包含任何目录名称)
realpath() 返回指定路径的绝对路径
pathinfo() 返回一个指定路径的文件信息的数组,包括其所在目录名、基本文件名、文件扩展名和文件名
filesize() 返回指定文件的大小
filetype() 获取指定文件的文件类型
fileowner() 获取指定文件的所有者 ID
filegroup() 获取指定文件所在组的 ID 值
filemtime() 返回指定文件的上一次修改时间
fileatime() 返回指定文件的上一次访问时间
fileperms() 获取指定文件的十进制权限值
filectime() 返回指定文件的inode修改时间
fileinode() 获取指定文件的inode编号
stat() 返回一个文件的所有统计信息
chown() 修改指定文件的所有者 ID
chgrp() 修改指定文件的所有者所在组的 ID
chmod() 修改指定文件的访问权限
touch() 修改指定文件的访问时间和修改时间
umask() 设置系统的umask掩码的值
is_dir() 判断给定的路径是否为一个目录
is_executable() 判断一个文件是否为可执行文件
is_file() 判断一个文件是否为一个正常的文件
is_link() 判断一个文件路径是否为一个符号链接
is_readable() 判断指定的文件或目录是否可读
is_uploaded_file() 检测指定文件是否是通过 HTTP POST 上传的
is_writable() 判断指定文件是否可写
is_writeable() 函数is_writable()的别名。判断指定文件是否可写
fnmatch() 对比给定的文件名或字符串是否符合特定的模式
glob() 匹配所有符合模式的文件路径,不进行缩写扩展或参数替代
parse_ini_file() 解析一个ini配置文件
parse_ini_string() 解析一个ini格式的配置字符串
link() 建立一个硬链接
linkinfo() 返回指定链接(路径)的设备ID信息。可用来验证该链接是否存在
symlink() 建立一个指向目标路径的符号链接(类似于 Windows 系统下的快捷方式)
readlink() 返回一个符号链接指向的目标路径
lstat() 返回文件或符号链接的统计信息
lchown() 修改符号链接的所有者(owner)ID
lchgrp() 修改符号链接的所属组(group)ID
readfile() 读入一个文件并将其内容写入到输出缓冲(会立即输出)
realpath_cache_size() 获取真实路径在缓冲区的大小
realpath_cache_get() 获取真实路径的缓存详情
set_file_buffer() 函数stream_set_write_buffer()的别名。设置已打开文件的写入缓冲大小(单位:字节)
fflush() 将所有的缓冲内容输出到已打开的文件
clearstatcache() 清除使用了stat()lstat()等其他会缓存信息的函数造成的缓存

在进行函数讲解之前,我们先了解几个概念:

  • 句柄
    • 英文名称Handle,Windows 系统下用来识别被进程打开的文件对象的整数,类同于Linux/Unix系统下的文件描述符
  • 指针
    • 引用对象的内存地址。
  • umask掩码
    • 用以限制新文件的权限。在类 Unix 系统创建新目录时,可以指定访问权限,但新目录的实际权限为“设定权限”减去umask掩码后的权限值。默认为0022
  • 符号链接
    • 类似于 Windows 系统下的快捷方式,具有数据内存的指向信息,删除符号链接不会影响到原始数据,而原始数据被删除后,符号链接失效。
  • 硬链接
    • 同一块数据的不同名称。删除一个硬链接只是删除这个名字,但如果删除了一块数据的所有别名(硬链接),该数据就会被删除。
  • 缓冲
    • 短时间内以先入先出的顺序保存和读取数据。

本参考手册的格式说明:

  • 函数名
  • 定义
  • 语法
    • 函数名
    • 参数列表:参数列表中,变量名前是该变量的数据类型,其中特殊的mixed表示有多种可能的数据类型;使用方括号包裹的参数表示可选
    • 返回类型:冒号后面是函数的标准返回类型
  • 参数说明
  • 示例
  • 延展阅读
    • 与当前函数具有相关性、相似性的函数