2010-11-17 10 views
5

Sto cercando di ottenere una lista con cartelle e sottocartelle ho il seguente che mi permette di ottenere le cartelle e sottocartelle ma ho bisogno di essere risolto come il per esempio qui sotto ho cercato ma non so come vorrei andare in giro.come visualizzare cartelle e sottocartelle da dir in PHP

Root/ 
Root/Images 
Root/Images/UserImages 

Root/Text/ 
Root/Text/User1/ 
Root/Text/User1/Folder2 

ma allo monent suo display come questo CODICE

Root/css/ 
tree/css/ 
js/ 
images/ 

PHP:

function ListFolder($path) 
{ 

    $dir_handle = @opendir($path) or die("Unable to open $path"); 

    //Leave only the lastest folder name 
    $dirname = end(explode("/", $path)); 

    //display the target folder. 
    echo ("$dirname/"); 
    while (false !== ($file = readdir($dir_handle))) 
    { 
     if($file!="." && $file!="..") 
     { 
      if (is_dir($path."/".$file)) 
      { 
       //Display a list of sub folders. 
       ListFolder($path."/".$file); 
       echo "<br>"; 
      } 
     } 
    } 


    //closing the directory 
    closedir($dir_handle); 
} 

    ListFolder("../"); 

Grazie

+1

possibili duplicati di almeno [PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator recuperare l'albero completo] (http: //stackoverflow.com/questions/2418068/php-spl-recursivedirectoryiterator-recursiveiteratoriterator-retrieving-the-full) – Gordon

risposta

3

Raccogliere i nomi delle directory in un array invece di echo li direttamente Utilizzare sort sull'array e un foreach -loop per stampare l'elenco.

Quindi invece di si utilizzerà $dirnames[] = $dirname; (rendere $ dirnames globali e inizializzarlo prima della prima chiamata di "ListFolder"). Poi, dopo la corsa ricorsiva di "ListFolder", che ci si esegue sort($dirnames); e poi qualcosa di simile per l'uscita:

foreach ($dirnames as $dirname) 
{ 
    echo $dirname . '<br />'; 
} 
1

potete achive ciò che si vuole con la DirectoryIterator o meglio il RecursiveDirectoryIterator dalla SPL php.

ecco un breve esempio su come utilizzare questo:

$dir = '/path/to/directory'; 
    $result = array(); 

    if (is_dir($dir)) { 
      $iterator = new RecursiveDirectoryIterator($dir); 
      foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {      
       if (!$file->isFile()) { 
        $result[] = 'path: ' . $file->getPath(). ', filename: ' . $file->getFilename(); 
       } 
      } 

    } 

Questo dovrebbe fare il trucco. Buona fortuna;)

+0

Sarebbe (probabilmente) preferibile saltare "is_dir()" e catturare la "UnexpectedValueException" lanciata da "RecursiveDirectoryIterator". se '$ dir' non è una directory; quest'ultimo controllerà comunque la directory. Puoi anche racchiudere gli iteratori in un 'ParentIterator', per elencare solo le directory e rinunciare alla condizione' isFile() '. – salathe

+0

sì, hai ragione, potrei e dovrei farlo, ma qui stavo solo cercando di mostrargli un rapido esempio. Grazie! – misterjinx

1

con questo codice, si otterrà liste con le sottodirectory (ma impostare il nomecartella)

<?php 
$path = realpath('yourfolder/examplefolder'); 
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) 
{ 
     echo "$filename\n"; 
} 
?> 
Problemi correlati