我见过一些类似的问题,但这些并不是我想要的。我正在寻找更好的方法来浏览文件和目录,而不是下面的代码:
$currentdir = (isset($_GET['current']) && !empty($_GET['current'])) ? $_GET['current'] : '.';
if(!file_exists($currentdir)) {
echo "There is no such directory (".$currentdir.")";
$currentdir = '.';
}
$dirs = [];
$others = [];
foreach (new DirectoryIterator($currentdir) as $fileInfo) {
if($fileInfo->isDot()) continue;
if($fileInfo->isDir()) {
array_push($dirs, $fileInfo->getFilename());
} else {
array_push($others, $fileInfo->getFilename());
}
}
echo("<h3>Directories:</h3>");
foreach($dirs as $dir) {
echo "<a href='?current=$dir'>".$dir."</a><br>";
}
echo("<h3>Files:</h3>");
foreach($others as $other) {
$mod_date=date("d/m/Y H:i", filemtime($other));
$size = filesize($other);
echo "$other $mod_date $size<br>";
}
我今后想要实现的是能够遍历目录(这意味着我需要为它们提供完整路径)并能够对它们执行一些基本操作 - 复制,读取等。所以有人可以建议我这样做的好方法,也许是一个框架吗?
此外,在此代码中,通过子目录移动并不顺利。我应该将父目录路径存储在某处还是只是以完全不同的方式重写它?
答案 0 :(得分:1)
这是一个线索:当您遍历层次结构(如文件系统)并且您事先并不知道可能存在多少级别的子目录时,您需要所谓的递归算法。也就是说,一个自称的函数。像这样(伪代码):
function listAllFilesInTree($dirname) {
moveToDirectory($dirname) ;
$listing = getDirectoryListingAsArray(".") ;
foreach ($listing as $item){
if ($item.type = "dir")
listAllFilesInTree ($item.name) ;
else
$filelist[] = $item.fullyQualifiedName ;
}
moveToPreviousDirectory();
}
注意如果找到一个子目录,它只是调用自己来处理子目录。当它停止查找子目录时,递归崩溃,留下$ filelist,其中包含树中所有文件的列表,无论树有多深。如果您在搜索SO上搜索“递归”或“递归”,您将在该主题上找到大约一百个其他帖子。