2017-11-18 8 views
0

Ich brauche Senioren Drop-Down-Liste der Root-Verzeichnisse mit PHP machen helfen. Ich habe fast erstellt, aber mit einem Problem wird nicht Stammverzeichnis erhalten.Ich möchte alle Verzeichnisnamen holen

Like home/abc/all dir Ich will

Codebeispiel

 <? 
$dirs = array_filter(glob('/*'), 'is_dir'); //this code getting main root folders 

print_r($dirs); // array showing root directory 
?> 

Aber ich will alle Verzeichnisse von zu Hause aus bekommen/username ist es möglich?

+0

ist Iframe-Code auf Ihr aktuelles Problem bezogen? Ich glaube nicht. Beschreiben Sie auch ein bisschen mehr: - 'aber mit einem Problem wird nicht Wurzelverzeichnis bekommen. Auch da, wo Sie sind vorbei 'home/abc /' bekommt all seine Unterverzeichnisse? –

+0

I missread Code. – Neil

+0

Lassen Sie mich in einfachen Worten beschreiben und auch meinen Code –

Antwort

0

Schleife durch Verzeichnis des Benutzers

Der folgende Code das Benutzerverzeichnis findet (kompatibel mit Windows, Mac und Linux), dann rekursiv echo ‚s den Verzeichnispfaden.

<?php 
$dir = ''; 
if (strpos(php_uname(),"Linux") === 0) { 
    //linux 
    $dir = "/home/"; 
} else { 
    //windows and mac 
    $dir = "https://stackoverflow.com/users/"; 
} 
$dir.=get_current_user(); 
$iterator = new DirectoryIterator($dir); 
foreach ($iterator as $fileinfo) { 
    if ($fileinfo->isDir() && !$fileinfo->isDot()) { 
     echo $fileinfo->getPathName() . "\n"; 
     // recursion goes here. 
    } 
} 
?> 

das gesamte System durch Looping

Die AJAX Methode

Ajax ist im Grunde nur eine Möglichkeit, zu einem Server zu kommunizieren, ohne aktualisieren zu müssen. Was der folgende Code tut es lädt Verzeichnisse lazy. So, wie es benötigt wird, wird es die nächste Iteration für Verzeichnisse laden. Ich glaube, das wäre, was Sie wollen, weil das Drucken alles von der Wurzel ein bisschen selbstmörderisch ist.

<?php 

    function filterDirectories($dir) { 
    $myDirs = scandir($_POST['dir']); 
    foreach ($myDirs as $key => $myDir) { 
     $path = str_replace('//','/',$dir . '/' . $myDir); 
     if (!is_dir($path) || $myDir === "." || $myDir === "..") { 
     unset($myDirs[$key]); 
     } else { 
     $myDirs[$key] = $path; 
     } 
    } 
    return array_values($myDirs); 
    } 

    if (isset($_POST['dir'])) { 
    echo json_encode(filterDirectories($_POST['dir'])); 
    die(); 
    } 

?> 

<body> 
    <form> 
    <div id="selectContainer"> 

    </div> 
    </form> 
</body> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script> 

$(function() { 
    "use strict"; 

    var rootDir = "/"; 

    function getDirectory(dir) { 
    $.post("#", { 
     dir : dir 
    }, function (data) { 

     var $select = $("<select>"); 
     for (var i = 0, len = data.length; i < len; i++) { 
     $("<option>") 
      .text(data[i]) 
      .attr('value',data[i]) 
      .appendTo($select); 
     } 
     $("#selectContainer").append($select); 

    }, "json"); 
    } 

    getDirectory(rootDir); 

    $("#selectContainer").on("change", "select", function() { 
    $(this).nextAll().remove(); 
    getDirectory($(this).val()); 
    }); 
}); 

</script> 
0

Trotz der Klärung zu der Frage bin ich nicht 100% sicher, das folgende ist, was Sie bedeuten. Ich nahm es zu sein, dass Sie alle Ordner unter dem Startort erhalten möchten - in Ihrem Fall /home/username

Die Klassen recursiveIterator sind sehr nützlich für diese Art von Aufgabe.

/* The ROOT directory you wish to scan */ 
$dir = 'c:/wwwroot/images'; 

if(realpath($dir)){ 
    $dirs=array(); 

    $dirItr=new RecursiveDirectoryIterator(realpath($dir), RecursiveDirectoryIterator::KEY_AS_PATHNAME); 

    foreach(new RecursiveIteratorIterator($dirItr, RecursiveIteratorIterator::CHILD_FIRST) as $file => $info) { 
     if($info->isDir()) $dirs[]=realpath($info->getPathName()); 
    } 
    echo '<pre>',print_r($dirs, 1),'</pre>'; 
}