PHP遍历目录下的全部文件

介绍

在 PHP 中,遍历目录下的全部文件很容易,主要是使用 readdir 函数和递归调用来完成。在本文中,我们将重点介绍如何使用 PHP 遍历目录下的全部文件。

读取文件夹中的文件

要遍历目录下的全部文件,我们首先需要使用 opendir 函数打开一个目录,接着使用 readdir 函数读取目录中的文件名。读取的文件名会包括 . 和 .. 两个特殊目录,所以我们需要添加一个过滤器来排除这两个特殊目录。

$dir = "/path/to/directory";

if (is_dir($dir)) {

if ($dh = opendir($dir)) {

while (($file = readdir($dh)) !== false) {

// 过滤掉 '.' 和 '..' 目录

if ($file != "." && $file != "..") {

echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";

}

}

closedir($dh);

}

}

上面的代码中,我们使用 is_dir 函数来检查指定的路径是否是一个目录。如果是一个目录,我们使用 opendir 函数打开该目录,并使用 readdir 函数循环读取其中的文件名。通过调用 filetype 函数,我们可以获取文件的类型。

递归调用

遍历目录下的全部文件通常需要递归调用来完成。在 PHP 中,递归函数通常使用下面的模板来编写:

function recursion($param) {

if (condition) {

// 终止条件

return $result;

} else {

// 递归调用

return recursion($param);

}

}

下面是一个使用递归调用来遍历目录下的全部文件的例子:

function listFiles($dir) {

$result = array();

$dh = opendir($dir);

while (($file = readdir($dh)) !== false) {

if ($file != "." && $file != "..") {

if (is_dir("$dir/$file")) {

$result = array_merge($result, listFiles("$dir/$file"));

} else {

$result[] = "$dir/$file";

}

}

}

closedir($dh);

return $result;

}

上面的代码中,我们定义了一个名为 listFiles 的函数,该函数接收一个参数 $dir,用于指定要遍历的目录。在函数内部,我们定义了一个名为 $result 的空数组,用于存储找到的所有文件。接着,我们使用 opendir 函数打开目录,并使用 readdir 函数循环读取目录中的文件名。如果读取到的文件名是 . 或 ..,则忽略该文件名。如果读取到的文件名是一个目录,则递归调用 listFiles 函数,并将结果合并到 $result 数组中。如果读取到的文件名不是目录,则将该文件名加入 $result 数组中。最后,我们使用 closedir 函数关闭目录,并返回 $result 数组。

总结

在 PHP 中,遍历目录下的全部文件很容易,主要是使用 opendir 函数和递归调用来完成。在本文中,我们详细讲解了如何使用 PHP 遍历目录下的全部文件。

后端开发标签