2017-11-18 182 views
0

我需要老年人幫助使根目錄下拉列表使用PHP。我幾乎創建了但有一個問題沒有得到根目錄。我想獲取所有目錄名稱

如家/ ABC /所有目錄我想

代碼示例

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

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

但我想從家裏所有的目錄/用戶名 這可能嗎?

+0

is iframe code is related to your current problem?我不認爲這是。另外再描述一下: - 「但有一個問題沒有得到根目錄」。還有,你在傳遞'home/abc /'來獲取所有子目錄? –

+0

我錯過了你的代碼。 – Neil

+0

讓我用簡單的語言來描述,並更新我的代碼 –

回答

0

遍歷用戶的目錄

下面的代碼找到用戶目錄(在Windows,Mac和Linux兼容)然後遞歸echo的目錄路徑。

<?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. 
    } 
} 
?> 

通過整個系統

的AJAX方法

Ajax是基本上只是一個,而無需刷新傳送給服務器的方式循環。下面的代碼會延遲加載目錄。所以,如果需要的話,它會加載目錄的下一個迭代。我相信這將是你想要的,因爲從根目錄打印一切都有點自殺。

<?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

儘管澄清問題,我不是100%確定以下是你的意思。我認爲你希望得到所有文件夾在開始位置 - 在你的情況下/home/username

recursiveIterator類對於這類任務非常有用。

/* 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>'; 
}