在本文中,我们将讨论如何在 PHP 中获取目录中所有文件的列表。
在日常 PHP 开发中,您经常需要处理文件系统——例如,获取特定目录中的文件列表。PHP 提供了几种不同的方式来轻松读取目录的内容。今天,我们将通过所有这些方法以及示例来了解每种方法的工作原理。
opendir
、readdir
和closedir
函数_
在本节中,我们将讨论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' );
?>
|
如您所见,这在一次调用中提供了文件和目录的列表!如果您只需要获取目录中的文件列表,这比使用 , 和 . 更好opendir
的readdir
选择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
$objDir
read
Directory
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
该类还提供了一些实用方法,如getExtension
、getSize
、getPathname
等。
这就是您可以使用FilesystemIterator
该类获取目录中文件列表的方式。
结论
今天,我们讨论了在 PHP 中列出目录中所有文件的不同方法。下表比较了每种方法,以帮助您选择适合您的方法。
函数或类 | 笔记 |
---|---|
opendir,readdir和closedir函数 | 不是最简单或功能最丰富的方法 |
scandir功能 | 读取文件列表的最简单方法 |
glob功能 | 非常简单并且允许模式匹配 |
dir功能 | 面向对象的版本readdir |
FilesystemIterator班级 | 可以提供有关文件的其他信息,例如大小或权限 |