2015-08-28 2 views
0

Я хочу перечислить все файлы и папки в папке рекурсивно. Я написал код, чтобы получить результат, но я не могу показать его надлежащим образом.Рекурсивно распечатывать все файлы и папки в папке

<?php 


class CheckFolder{ 

    public function getSubFolders($dir) 
    { 
     $folders = array(); 
     $ffs = scandir($dir); 
     foreach($ffs as $ff) 
     { 
      if($ff != '.' && $ff != '..') 
      { 
       if(is_dir($dir.'/'.$ff)) $folders[] = $ff; 
      } 
     } 
     return $folders;  
    } 

    public function getFiles($dir) 
    { 
     $files = array(); 
     if(is_dir($dir)) 
     { 
      $ffs = scandir($dir); 
      foreach($ffs as $ff) 
      { 
       if($ff != '.' && $ff != '..') 
       { 
        if(!is_dir($dir.'/'.$ff)) $files[] = '<li>'.$ff.'</li>'; 
       } 
      } 
     } 
     return $files; 
    }  

    function listFolderFiles($dir) 
    { 
     $ffs  = scandir($dir); 
     $folders = $this->getSubFolders($dir); 
     $files = $this->getFiles($dir); 

     if(strpos($dir, '/') >0) 
     { 
      $folderName = substr($dir, strrpos($dir, '/') + 1); 
     } 
     else 
     {   
      $folderName = $dir; 
     } 
     echo '<ul>'; 
     echo '<li>'.$folderName.'</li>'; 
     if(count($files) > 0) 
     { 
      echo '<ul>'; 
      foreach($files as $file) 
      { 
       // /echo '<li>'.$file.'</li>'; 
       echo $file; 
      } 
      echo '</ul>'; 
     } 

     echo '</ul>'; 

     foreach($folders as $folder) 
     { 
      // echo '<li>'.$folderName.'</li>'; 
      $this->listFolderFiles($dir.'/'.$folder); 
     } 

    } 


} 

$dir = 'test'; 
$folder = new CheckFolder(); 
$folder->listFolderFiles($dir) 

?> 

Выходной ток enter image description here

Ожидаемое:

enter image description here

+0

Вызов функции снова внутри себя, если он установлен в папку ребенка, это время, которое проходит в 'Еогеасп ($ пф в $ F)' «' $ f'»вар в качестве параметра. Не забудьте проверить внутри foreach, если папка имеет дочерние элементы, потому что если ее папка с листьями и новый массив не должны начинаться снова. [См., Если это помогает] (http://stackoverflow.com/questions/640931/recursive-counting-files-with-php). –

ответ

2

Я не знаю, если вы смотрели, и, возможно, со скидкой, встроенный в recursiveIterator и recursiveDirectoryIterator набор классов ?

Нижеследующее не заботится о том, что вы указываете, но это отличный способ (хотя, возможно, не так быстро, как рекурсивная функция вашего собственного создания), чтобы перебирать все каталоги в пути.

Пособие редкое с хорошими примерами IMHO, но следующее может представлять интерес, особенно если вы можете указать такие вещи, как CHILD_FIRST.

$folder=__DIR__; 
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::KEY_AS_PATHNAME), RecursiveIteratorIterator::CHILD_FIRST) as $file => $info) { 
    if($info->isFile() && $info->isReadable() && $info->isWritable()){ 
     echo $info->getPathname() .' ' . $info->getFilename().BR; 
    } 
} 
Смежные вопросы