PHP浏览文件和目录

时间:2016-06-28 21:28:59

标签: php file-manager

我见过一些类似的问题,但这些并不是我想要的。我正在寻找更好的方法来浏览文件和目录,而不是下面的代码:

$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>";
}

我今后想要实现的是能够遍历目录(这意味着我需要为它们提供完整路径)并能够对它们执行一些基本操作 - 复制,读取等。所以有人可以建议我这样做的好方法,也许是一个框架吗?

此外,在此代码中,通过子目录移动并不顺利。我应该将父目录路径存储在某处还是只是以完全不同的方式重写它?

1 个答案:

答案 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上搜索“递归”或“递归”,您将在该主题上找到大约一百个其他帖子。