1

Topic: Как в PHP вывести дерево папок и файлов

<?php
   $path = '../';
        $queue = ";
   function createDir($path = '.')
   {
      if ($handle = opendir($path))
      {
         echo '<ol class="tree">';
         while (false !== ($file = readdir($handle)))
         {
            if (is_dir($path.$file) && $file != '.' && $file !='..')
               printSubDir($file, $path, $queue);
            else if ($file != '.' && $file !='..')
               $queue[] = $file;
         }
         printQueue($queue, $path);
         echo '</ol>';
      }
   }
   function printQueue($queue, $path)
   {
      foreach ($queue as $file)
      {
         printFile($file, $path);
      }
   }
   function printFile($file, $path)
   {
      echo '<li class="file"><a href="' . $path.$file. ' ">' . $file . '</a></li>';
   }
   function printSubDir($dir, $path)
   {
      echo '<li class="toggle">' . $dir . '<input type="checkbox">';
      createDir($path.$dir.'/');
      echo '</li>';
   }
   createDir($path);

Описание основных функции:

$path — путь к файлам для дерева каталогов, если значение '.' выводятся файлы из текущего каталога где находится файл tree.php.
createDir($path) принимает в путь (или по умолчанию в каталоге, в котором этот файл находится). Использует как printFile($file, $path) и printSubDir($dir, $path).
printFile($file, $path) выводит ссылку в элемент HTML <li> с помощью данного файла и пути к нему.
printSubDir($dir, $path) каталоги и подкаталоги с помощью вызова createDir($path) там где рекурсия.

2

Re: Как в PHP вывести дерево папок и файлов

function rec_listFiles( $from = '.')
{
    if(! is_dir($from))
        return false;
    
    $files = array();
    if( $dh = opendir($from))
    {
        while( false !== ($file = readdir($dh)))
        {
            // Skip '.' and '..'
            if( $file == '.' || $file == '..')
                continue;
            $path = $from . '/' . $file;
            if( is_dir($path) )
                $files += rec_listFiles($path);
            else
                $files[] = $path;
        }
        closedir($dh);
    }
    return $files;
}

The second one is iterative (uses less memory) : ПРОВЕРИТЬ!!!

<?php
function listFiles( $from = '.')
{
    if(! is_dir($from))
        return false;
    
    $files = array();
    $dirs = array( $from);
    while( NULL !== ($dir = array_pop( $dirs)))
    {
        if( $dh = opendir($dir))
        {
            while( false !== ($file = readdir($dh)))
            {
                if( $file == '.' || $file == '..')
                    continue;
                $path = $dir . '/' . $file;
                if( is_dir($path))
                    $dirs[] = $path;
                else
                    $files[] = $path;
            }
            closedir($dh);
        }
    }
    return $files;
}