2010-11-17 37 views
5

Klasörleri ve alt klasörleri içeren bir listeyi almaya çalışıyorum, klasörleri ve alt klasörleri almamı sağlayan aşağıdakilere sahibim. Örneğin aşağıda çalışıyordum ama nasıl etrafta dolaşacağımı bilmiyorum. PHP'de klasörleri ve alt klasörleri nasıl görüntüleyeceğiniz

Root/ 
Root/Images 
Root/Images/UserImages 

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

ama monent

bu

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

PHP KODU gibi onun ekran:

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("../"); 

Bir dizide dizin adları toplayın yerine echo size

+1

olası yinelenen ayarlayacaktır: //stackoverflow.com/questions/2418068/php-spl-recursivedirectoryiterator-recursiveiteratoriterator-retrieving-the-full) – Gordon

cevap

3

ederiz onları doğrudan Listede sort ve listeyi yazdırmak için foreach -loop kullanın.

Yani yerine echo ("$dirname/"); Eğer $dirnames[] = $dirname; ($ dirnames küresel yapıp "ListFolder" nin ilk çağrı önce başlatma) kullanacaktır. Ardından "ListFolder" nin özyinelemeli çalıştırdıktan sonra, çıkış için böyle sort($dirnames); ve sonra bir şeyler yürütmek istiyorum:

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

Eğer DirectoryIterator ile istediğinizi başarmak ya da daha iyi php SPL RecursiveDirectoryIterator.

$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(); 
       } 
      } 

    } 

Bu hile yapmak gerekir: Burada

bu nasıl kullanılacağına ilişkin hızlı bir örnektir. İyi şanslar;) bu kodla

+0

'' is_dir() 'komutunu atlamak ve 'RecursiveDirectoryIterator' tarafından atılan 'UnexpectedValueException' değerini yakalamak tercih edilir (muhtemelen). '$ dir' bir dizin değilse; ikincisi, yine de dizini kontrol edecek. Yineleyicileri yinelemeli olarak bir "ParentIterator" da, yalnızca dizinleri listeleyip "isFile()" durumundan vazgeçebilirsiniz. – salathe

+0

evet, haklısınız, bunu yapabilirim ve yapmalıyım, ama burada sadece ona hızlı bir örnek göstermeye çalışıyordum. Teşekkürler! – misterjinx

1

, sen alt dizinleri ile listeleri olsun (ancak klasöradı), en az (http [PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator tam ağacını alınırken] arasında

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