如何在 PHP 中列出目录中的文件

如何在 PHP 中列出目录中的文件

在本文中,我们将讨论如何在 PHP 中获取目录中所有文件的列表。

在日常 PHP 开发中,您经常需要处理文件系统——例如,获取特定目录中的文件列表。PHP 提供了几种不同的方式来轻松读取目录的内容。今天,我们将通过所有这些方法以及示例来了解每种方法的工作原理。

opendirreaddirclosedir函数_

在本节中,我们将讨论opendir、readdir和closedir函数,以了解如何使用它们来获取特定目录中的文件列表。

opendir函数允许您打开一个目录句柄,您可以将其与其他函数一起用于对目录进行不同的操作。您需要将路径传递到opendir函数的第一个参数中的目录。如果目录路径有效,将返回目录句柄资源。

readdir功能允许您读取目录。您需要在readdir函数的第一个参数中提供有效的目录句柄,并且可以遍历所有条目并获取目录中所有文件的列表。

closedir函数允许您关闭由该opendir函数打开的目录句柄。closedir完成对目录句柄(最初由opendir函数打开)的操作后,使用该函数是一个很好的做法。

现在,让我们在下面的示例中查看它的实际效果。

01
02
03
04
05
06
07
08
09
10
11
12
<?php
$arrFiles = array();
$handle = opendir('/path/to/directory');
if ($handle) {
    while (($entry = readdir($handle)) !== FALSE) {
        $arrFiles[] = $entry;
    }
}
closedir($handle);
?>

首先,我们使用opendir函数来获取目录句柄。接下来,我们使用该readdir函数遍历$handle目录句柄并将文件列表存储在$arrFiles数组中。

scandir功能_

在本节中,我们将了解如何使用该scandir函数获取目录内容。

scandir函数是获取特定目录中文件和目录列表的一种非常简单的方法。您只需要在函数的第一个参数中传递要读取的目录路径scandir

让我们通过以下示例来了解它是如何工作的。

1
2
3
<?php
$arrFiles = scandir('/path/to/directory');
?>

如您所见,这在一次调用中提供了文件和目录的列表!如果您只需要获取目录中的文件列表,这比使用 , 和 . 更好opendirreaddir选择closedir

glob功能_

该glob函数的工作方式与该函数类似scandir,不同之处在于它允许您指定用于过滤和匹配目录中文件的模式。

让我们看看如何使用该glob函数读取特定目录的所有内容。

1
2
3
<?php
$arrFiles = glob('/path/to/dir/*');
?>

如您所见,我们已经通过了*模式,因为我们想要读取所有内容。另一方面,如果您只想列出特定类型的文件,您也可以这样做,如以下代码段所示。

1
2
3
<?php
$arrFiles = glob('/path/to/dir/*.txt');
?>

在这种情况下,$arrFiles将只包含.txt文件的名称。

dir功能_

到目前为止,我们讨论的选项允许您以程序方式读取目录内容。在本节中,我们将了解如何使用该dir函数,它是一种用于读取目录的面向对象的机制。

当您使用该dir函数并在第一个参数中传递目录路径时,它会返回Directory该类的一个实例,您可以随后使用该实例来读取目录内容。

让我们通过下面的例子来看看它是如何工作的。

01
02
03
04
05
06
07
08
09
10
<?php
$arrFiles = array();
$objDir = dir("/path/to/dir");
while (false !== ($entry = $objDir->read())) {
   $arrFiles[] = $entry;
}
$objDir->close();
?>

首先,我们使用该函数将类dir的实例初始化为变量。接下来,我们使用类的方法遍历所有条目。Directory$objDirreadDirectory

广告

FilesystemIterator班级_

在本节中,我们将了解如何使用FilesystemIterator该类来读取目录内容。使用FilesystemIterator该类的好处是您可以扩展该类的方法,并且它还提供了许多其他有用的方法,可以让您获取有关文件的各种信息。

让我们通过以下示例来了解它是如何工作的。

1
2
3
4
5
6
7
8
<?php
$arrFiles = array();
$iterator = new FilesystemIterator("/path/to/directory");
foreach($iterator as $entry) {
    $arrFiles[] = $entry->getFilename();
}
?>

如您所见,使用FilesystemIterator该类并遍历条目非常容易。在上面的例子中,我们使用了类的getFileName方法FilesystemIterator来获取文件名。但是,FilesystemIterator该类还提供了一些实用方法,如getExtensiongetSizegetPathname等。

这就是您可以使用FilesystemIterator该类获取目录中文件列表的方式。

结论

今天,我们讨论了在 PHP 中列出目录中所有文件的不同方法。下表比较了每种方法,以帮助您选择适合您的方法。

函数或类 笔记
opendir,readdir和closedir函数 不是最简单或功能最丰富的方法
scandir功能 读取文件列表的最简单方法
glob功能 非常简单并且允许模式匹配
dir功能 面向对象的版本readdir
FilesystemIterator班级 可以提供有关文件的其他信息,例如大小或权限
你觉得这篇文章有用吗?
                       

点击阅读全文

上一篇 2023年 5月 27日 am10:43
下一篇 2023年 5月 27日 am10:45