下面是一个使用PHP编写的简单类,用于递归地获取指定目录内的所有文件和子目录。这个类将提供一个方法来遍历目录并收集所有文件和子目录的路径。
<?php
class DirectoryIterator {
private $directory;
public function __construct($directory) {
if (!is_dir($directory)) {
throw new InvalidArgumentException("$directory is not a directory.");
}
$this->directory = $directory;
}
/**
* 递归获取目录下的所有文件和子目录
*
* @return array 包含所有文件和子目录路径的数组
*/
public function getAllFilesAndFolders() {
$items = [];
// 打开目录
$dir = opendir($this->directory);
// 读取目录中的每个项目
while (($file = readdir($dir)) !== false) {
// 排除'.'和'..'
if ($file != "." && $file != "..") {
$path = $this->directory . DIRECTORY_SEPARATOR . $file;
// 如果是目录,则递归处理
if (is_dir($path)) {
$items = array_merge($items, $this->getDirectoryItems($path));
} else {
// 如果是文件,直接添加到数组中
$items[] = $path;
}
}
}
// 关闭目录
closedir($dir);
return $items;
}
/**
* 递归处理目录
*
* @param string $path 目录路径
* @return array 包含目录内所有文件和子目录路径的数组
*/
private function getDirectoryItems($path) {
$items = [];
$dir = opendir($path);
while (($file = readdir($dir)) !== false) {
if ($file != "." && $file != "..") {
$fullPath = $path . DIRECTORY_SEPARATOR . $file;
if (is_dir($fullPath)) {
$items = array_merge($items, $this->getDirectoryItems($fullPath));
} else {
$items[] = $fullPath;
}
}
}
closedir($dir);
return $items;
}
}
// 使用示例
$dirIterator = new DirectoryIterator("/path/to/your/directory");
$filesAndFolders = $dirIterator->getAllFilesAndFolders();
print_r($filesAndFolders);
?>
这个类包含两个主要方法:`__construct` 用于初始化目录路径,`getAllFilesAndFolders` 用于递归获取所有文件和子目录的路径。`getDirectoryItems` 是一个私有方法,用于递归地处理目录中的每个项目。
请注意,你需要将 `"/path/to/your/directory"` 替换为你想要遍历的目录的实际路径。此外,这个类没有处理潜在的错误,如目录权限问题或文件系统错误,这些在生产环境中可能需要额外处理。