介绍
在 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 遍历目录下的全部文件。