在本文中我们介绍了 PHP 中的文件系统函数,我们处理文件和目录,确定文件许可权和可用磁盘空间,以及读写文件。 对于我们的示例,我们使用 PHP CLI。
PHP 具有用于处理文件和目录的丰富函数集, PHP 包含低级和高级文件系统函数。 fopen()
函数是一个低级函数的示例。 它是类似 C 函数的薄包装,file()
函数是高级 PHP 文件系统函数的示例。
文件大小和类型
filesize()
函数返回给定文件的大小。 大小以字节为单位指定。
get_filesize.php
在示例中,我们确定fruits.txt
文件的大小。 该文件位于当前工作目录中,即与 PHP 脚本位于同一目录中。
fruits.txt
文件的大小为 40 个字节。
filetype()
函数获取文件的类型。 可能的返回值是:fifo
,char
,dir
,block
,link
,file
,socket
和unknown
。
file_types.php
该脚本确定四个文件的类型。
这四个文件是常规文件,目录,字符设备和套接字。
文件是否存在
我们可能想使用一个不存在的文件,这可能发生。 file_exists()
函数可用于防止这种情况。
file_existence.php
该脚本在计算给定文件的大小之前会检查其是否存在。
$argc
是一个特殊变量,其中包含传递给脚本的参数数量。 我们需要两个参数:一个脚本名称和另一个作为参数传递的文件名。
$argv
是传递给脚本的参数数组。 我们得到第二个要素。
我们使用file_exists()
函数检查文件是否存在。 如果它不存在,我们将以一条消息终止脚本。
这是file_existence.php
脚本的示例输出。
在下面的示例中,我们创建一个新文件,将其删除,然后检查其是否存在。 touch()
函数设置文件的访问和修改时间。 如果该文件不存在,则会创建它。 unlink()
函数删除文件。
file_existence2.php
在代码示例中,我们利用了所有三个函数:file_exists()
,touch()
和unlink()
。
touch()
函数用于创建一个名为newfile.txt
的新文件。
如果touch()
函数失败,则会打印一条错误消息。 许多 PHP 函数在失败时会返回false
值。
unlink()
函数删除文件。
这是file_existence2.php
的输出。
复制和重命名文件
copy()
函数复制文件,rename()
重命名文件。 如果目标文件已经存在,它将被覆盖。
copy_file.php
该脚本将复制文件。
rename_file.php
在此脚本中,我们使用rename()
函数将myfile2
文件重命名为myfile_back
。
E_WARNING
一些文件系统函数在失败时发出E_WARNING
。 这是运行时警告(非致命错误)。 脚本的执行不会停止。
PHP 在这方面不一致。 并非所有文件系统函数都发出此警告-大多数函数仅在失败时才返回错误值。
custom_error_handler.php
在脚本中,我们删除文件并提供自定义错误处理程序。
使用set_error_handler()
函数设置自定义错误处理程序。
处理程序将收到错误号和错误字符串作为参数。
当没有image1.png
要删除时,custom_error_handler.php
提供此输出。
目录
dirname()
函数返回父目录的路径。 从 PHP 7 开始,我们可以提供一个可选的 levels 参数,该参数指示要上升的父目录的数量。
parent_directories.php
在脚本中,我们打印四个目录的父目录。
我们使用getenv()
函数来获取当前用户的主目录。
此行显示用户主目录的父目录。
在这里,我们打印当前工作目录的父目录。
在这一行中,我们打印/usr/local/lib
目录的第二个父目录。
这是parent_directories.php
的输出。
getcwd()
函数返回当前工作目录,chdir()
函数将当前工作目录更改为新目录。
current_directory.php
该脚本可与getcmd()
和chdir()
函数一起使用。
这是脚本的示例输出。
列出目录
在以下五个示例中,我们列出了目录的内容。 有几种方法可以完成此任务。
list_dir1.php
opendir()
函数打开目录句柄。 readdir()
函数从目录句柄读取条目。 在脚本末尾使用closedir()
函数关闭目录的句柄。
is_dir()
函数判断文件名是否为目录,is_file()
函数判断文件名是否为文件。
list_dir2.php
在第二个示例中,我们将条目分为子目录和文件。 该脚本首先打印子目录,然后打印所检查目录的文件。
必须提供is_dir()
函数的目录的完整路径。
glob()
函数查找与模式匹配的路径名。
list_dir3.php
使用GLOB_ONLYDIR
标志,glob()
函数仅返回与模式匹配的目录条目。
scandir()
是高级函数,用于列出指定路径内的文件和目录。 该函数从目录返回文件和目录的数组。
list_dir4.php
该脚本打印当前工作目录的文件和子目录的数组。 SCANDIR_SORT_DESCENDING
标志以字母降序对条目进行排序。
在前面的示例中,我们仅列出了一个目录的内容; 我们没有包括子目录的元素。 使用RecursiveDirectoryIterator
和RecursiveIteratorIterator
类,我们可以轻松地使用递归遍历文件系统目录。 换句话说,我们遍历所有子目录,直到列出目录树中的所有项目。
list_dir5.php
该脚本将打印所有深度级别的给定目录的所有项目。
路径
路径是计算机文件的完整指定名称,包括文件在文件系统目录结构中的位置。 realpath()
函数返回规范的绝对路径名,basename()
函数返回路径的尾随名称部分。
paths.php
该脚本使用realpath()
和basename()
函数。
如果我们指定第二个参数,即后缀名,则它也会从路径名中删除。
这是paths.php
示例的输出。
pathinfo()
函数返回有关文件路径的信息。
path_info.php
该函数返回一个包含以下元素的关联数组:dirname,basename,扩展名(如果有)和文件名。
这是输出。
创建文件
fopen()
函数打开文件或 URL。 函数的第一个参数是文件名,第二个是打开窗口的模式。 例如,'r'
模式打开仅用于读取,'w'
模式仅用于写入。 如果我们以'w'
模式打开文件,但该文件不存在,则会创建该文件。
fopen()
返回文件的句柄。 这是一个用于操作文件的对象。 例如,我们将其传递给fwrite()
函数以写入文件。
create_file.php
该示例创建一个名为names.txt
的新文件。
首先,我们检查文件是否存在。
创建names.txt
文件,并返回该文件的句柄。
我们使用fclose()
函数关闭文件句柄。
读取文件
在下一个示例中,我们将读取文件内容。
fread()
从句柄引用的文件指针中读取最多length
个字节。 读取length
字节或到达 EOF(文件末尾)后,读取停止。
read_file.php
该示例使用fread()
函数读取整个文件,并将其输出到控制台。
feof()
测试文件指针上的文件结尾。 fread()
每 1 KB 的块读取文件,直到达到 EOF。
这是read_file.php
示例的输出。
在第二个示例中,我们利用fgets()
函数从文件句柄读取一行。
read_file2.php
该示例逐行读取balzac.txt
文件的内容。
file()
是将整个文件读入数组的高级函数。
read_file3.php
在此示例中,我们使用file()
函数一次读取了整个文件。 我们使用foreach
循环遍历返回的数组。
file_get_contents()
是另一个高级函数,它将整个文件读取为字符串。
read_file4.php
该示例使用file_get_contents()
函数一次读取了整个文件。 它以字符串形式返回数据。
读取格式化的数据
fscanf()
函数根据格式分析文件的输入。 每次对fscanf()
的调用都会从文件中读取一行。
我们将解析items.txt
文件。
read_formatted_data.php
fscanf()
函数使用格式说明符来读取字符串和数字。
读取网页
PHP 文件系统函数还可用于读取网页。
read_page.php
我们从一个名为www.something.com
的小型网站上阅读了一个页面。
使用fopen()
函数,我们打开网页的句柄。
我们阅读网页直至结束。 feof()
用于测试网页的结尾。 使用fread()
函数以 1 KB 的块读取页面。
这是read_page.php
脚本的输出。
以下示例使用高级函数来读取同一网页。
read_page2.php
file_get_contents()
一次读取整个网页。
fgetss()
函数从文件句柄读取一行并剥离 HTML 标签。
read_page3.php
我们阅读www.something.com
网页的内容并剥离其 HTML 标签。
这是示例的输出; 输出包含页面正文中的标题和文本。
写入文件
fwrite()
函数将字符串写入文件句柄引用的文件。
write_file.php
我们在写入模式下打开names.txt
并向其中写入四行。
fopen()
函数以写入模式打开文件。 如果文件不存在,则会自动创建。
使用fwrite()
函数,我们在文件中写入一行。 该函数将文件句柄作为其第一个参数。
我们写入names.txt
文件并检查其内容。
我们可以使用高级file_put_contents()
方法将字符串一次性写入文件。
write_file2.php
在示例中,我们使用file_get_contents()
函数读取names.txt
文件的内容,并使用file_put_contents()
函数附加新字符串。
可读,可写,可执行文件
is_readable()
,is_writable()
和is_executable()
函数检查文件是否可读,可写和可执行。
rwe.php
我们在myfile.txt
文件上运行三个函数。 该脚本检查当前用户的这些属性。
janbodnar
用户可以读写该文件,但不能执行。
文件时间
Linux 上有三种文件时间:上次访问时间,上次更改时间和上次修改时间。 以下 PHP 函数确定这些时间:fileatime()
,filectime()
和filemtime()
。
file_times..php
该脚本打印myfile.txt
文件的文件时间。
这是file_times.php
脚本的示例输出。
文件权限
文件系统对不同的用户和用户组强制执行文件权限。 fileperms()
函数获得文件许可; 它以数字方式返回文件的权限。
file_permissions.php
该脚本确定myfile.txt
的文件许可权。 权限以 Unix 样式打印到控制台。
Unix 上的权限传统上以八进制表示形式编写。 decoct()
函数将十进制表示形式转换为八进制形式。
在这一行中,我们检查文件权限是否允许文件所有者读取它。
这是file_permissions.php
脚本的示例输出。
可以使用chmod()
函数更改文件权限。
.php
该脚本更改myfile.txt
文件的权限。
chmod
函数在其第二个参数中接受权限作为八进制值。 八进制值以 0 开头。
文件的权限从 664 更改为 660。
CSV 文件格式
fgetcsv()
函数从 CSV(逗号分隔值)文件中读取一行; 它返回一个包含读取字段的索引数组。 fputcsv()
函数将一行格式设置为 CSV 并将其写入文件。
csv_output.php
该脚本将数组中的数字写入 CSV 文件。
我们运行脚本并检查文件内容。
在以下示例中,我们从 CSV 文件读取数据。
csv_input.php
该脚本使用fgetcsv()
从numbers.csv
文件中读取值,并将其打印到控制台中。
这是csv_input.php
脚本的输出。
磁盘空间
disk_total_space()
函数以字节为单位返回文件系统或磁盘分区的总大小,disk_total_space()
函数以字节为单位返回文件系统或磁盘分区上的可用空间。
disk_space.php
该脚本计算根分区上的总空间和可用空间。 该空间被转换为千兆字节。
您可能也对以下相关教程感兴趣: PHP PDO 教程, PHP 教程。