PHP – 文件列表



Windows 命令 DIR 和 Linux 命令 ls 都显示当前目录中的文件列表。这些命令可以使用不同的开关来对显示的文件列表应用条件。PHP 提供了一些选项,可以以编程方式列出给定目录中的文件。

readdir() 函数

PHP 中的 opendir() 函数类似于 fopen() 函数。它返回目录的句柄,以便可以以序列化方式读取目录的内容。

opendir(string $directory, ?resource $context = null): resource|false

此函数打开一个目录句柄,供后续的 closedir()、readdir() 和 rewinddir() 调用使用。

readdir() 函数从 opendir() 函数返回的流句柄中读取下一个可用条目。

readdir(?resource $dir_handle = null): string|false

这里,dir_handle 是先前用 opendir() 打开的目录句柄。如果没有指定,则假定为 opendir() 最近打开的链接。

closedir() 函数类似于 fclose() 函数。它关闭目录句柄。

closedir(?resource $dir_handle = null): void

该函数关闭 dir_handle 指示的目录流。该流必须先前已由 opendir() 打开。

示例

以下 PHP 代码一次读取当前登录目录中的一个文件。

<?php
   $dir = getcwd();
   
   // Open a known directory, and proceed to read its contents
   if (is_dir($dir)) {
      if ($dh = opendir($dir)) {
         while (($file = readdir($dh)) !== false) {
            echo "filename:" . $file . "\n";
         }
         closedir($dh);
      }
   }
?>

scandir() 函数

scandir() 函数检索给定目录内的文件和子目录。

scandir(string $directory, 
int $sorting_order = SCANDIR_SORT_ASCENDING, 
?resource $context = null): array|false

默认情况下,“排序顺序”为升序字母顺序。如果此可选参数设置为 SCANDIR_SORT_DESCENDING,则排序顺序变为降序字母顺序。如果将其设置为 SCANDIR_SORT_NONE,则结果将未排序。

示例

使用以下 PHP 代码,scandir() 函数将返回给定目录中文件的数组。

<?php
   $dir = "c:/xampp/php/mydir/";

   $files = scandir($dir);
   var_dump($files);
?>

它将产生以下输出

array(4) {
   [0]=>
   string(1) "."
   [1]=>
   string(2) ".."
   [2]=>
   string(5) "a.txt"
   [3]=>
   string(5) "b.txt"
}

您可以使用foreach循环遍历 scandir() 函数返回的数组。

<?php
   $dir = "c:/xampp/php/mydir/";

   $files = scandir($dir);
   foreach ($files as $file)
   echo $file . PHP_EOL;
?>

它将产生以下输出

.
..
a.txt
b.txt
广告