目录遍历是编程中一个常见的任务,特别是在处理文件系统时。在PHP中,我们可以使用多种方法来实现目录遍历。以下是一个实用的示例代码,展示了如何使用PHP遍历一个目录及其所有子目录下的文件。
<?php
function listDirectoryContents($dir) {
$files = array();
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ($file != "." && $file != "..") {
$files[] = $file;
}
}
closedir($dh);
}
}
return $files;
}
function directoryRecursive($dir, $level = 0) {
$files = array();
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ($file != "." && $file != "..") {
if (is_dir($dir . DIRECTORY_SEPARATOR . $file)) {
$files[$dir][] = str_repeat(" ", $level) . $file . "/";
$files = array_merge($files, directoryRecursive($dir . DIRECTORY_SEPARATOR . $file, $level + 1));
} else {
$files[$dir][] = str_repeat(" ", $level) . $file;
}
}
}
closedir($dh);
}
}
return $files;
}
// 使用示例
$directoryPath = "/path/to/directory"; // 请替换为你的目录路径
$files = directoryRecursive($directoryPath);
// 打印文件和目录列表
foreach ($files as $dir => $fileList) {
echo "Directory: $dir" . PHP_EOL;
foreach ($fileList as $file) {
echo $file . PHP_EOL;
}
}
?>
代码说明
listDirectoryContents() 函数:
- 这个函数接受一个目录路径作为参数。
- 使用
opendir()打开目录。 - 读取目录中的每个文件,忽略
.和..。 - 将文件名添加到数组中并返回。
directoryRecursive() 函数:
- 这个函数不仅列出文件,还递归地列出所有子目录。
- 使用递归调用自身来遍历子目录。
- 每次递归调用时,
$level参数增加,用于在输出中缩进目录路径。
使用示例:
- 设置
$directoryPath为你要遍历的目录路径。 - 调用
directoryRecursive()函数并传递目录路径。 - 循环遍历返回的数组并打印每个文件和目录。
- 设置
这个示例代码展示了如何在PHP中实现基本的目录遍历,你可以根据实际需求调整和扩展这个函数。
