PHP

2010-11-17 10 views
5

में डीआईआर से फ़ोल्डर और उप फ़ोल्डरों को प्रदर्शित करने के लिए कैसे करें मैं फ़ोल्डरों और उप फ़ोल्डरों के साथ एक सूची प्राप्त करने की कोशिश कर रहा हूं, मेरे पास निम्नलिखित हैं जो मुझे फ़ोल्डर्स और उप फ़ोल्डर्स प्राप्त करने की अनुमति देता है लेकिन मुझे इसकी तरह हल करने की आवश्यकता है उदाहरण के लिए मैं कोशिश कर रहा हूं लेकिन मुझे नहीं पता कि मैं कैसे घूमूंगा।PHP

Root/ 
Root/Images 
Root/Images/UserImages 

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

लेकिन monent पर इस

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

धन्यवाद

+1

कम से कम [पीएचपी एसपीएल RecursiveDirectoryIterator RecursiveIteratorIterator पूर्ण पेड़ को पुन: प्राप्त] (http के संभावित डुप्लिकेट सेट हो जाएगा: //stackoverflow.com/questions/2418068/php-spl-recursivedirectoryiterator-recursiveiteratoriter-retrieving-the-full) – Gordon

उत्तर

3

बजाय echo एक सरणी में निर्देशिका नाम एकत्र उन्हें सीधे inging। सूची मुद्रित करने के लिए सरणी पर sort और foreach का उपयोग करें।

तो echo ("$dirname/"); के बजाय आप $dirnames[] = $dirname; का उपयोग करेंगे ($ dirnames वैश्विक बनाएं और "ListFolder" के पहले कॉल से पहले इसे प्रारंभ करें)। फिर "ListFolder" की पुनरावर्ती चलाने के बाद, आप उत्पादन के लिए अमल होता sort($dirnames); और फिर कुछ इस तरह:

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

तुम क्या आप DirectoryIterator साथ चाहते हैं हासिल कर सकते हैं या बेहतर RecursiveDirectoryIterator php एसपीएल से।

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

    } 

इस चाल करना चाहिए:

यहाँ है कि यह कैसे उपयोग करने के लिए पर एक त्वरित उदाहरण है। गुड लक;)

+0

यह (is) 'is_dir() 'को छोड़ने के लिए बेहतर होगा और' रिकर्सिव डायरेक्टरी इटरेटर 'द्वारा फेंक दिया गया' अप्रत्याशित वैल्यूएक्सप्शन 'पकड़ लें अगर '$ dir' निर्देशिका नहीं है; उत्तरार्द्ध वैसे भी निर्देशिका की जांच करने जा रहा है। आप केवल निर्देशिकाओं को सूचीबद्ध करने के लिए, 'isFile()' स्थिति को छोड़ने के लिए, 'पेरेंटइटरेटर' में इटरेटर को लपेट सकते हैं। – salathe

+0

हाँ, आप सही हैं, मैं कर सकता हूं और ऐसा करना चाहिए, लेकिन यहां मैं बस उसे एक त्वरित उदाहरण दिखाने की कोशिश कर रहा था। धन्यवाद! – misterjinx

1

इस कोड के साथ , आप उपनिर्देशिकाएं के साथ सूची प्राप्त (लेकिन अपने फ़ोल्डर)

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