我需要老年人幫助使根目錄下拉列表使用PHP。我幾乎創建了但有一個問題沒有得到根目錄。我想獲取所有目錄名稱
如家/ ABC /所有目錄我想
代碼示例
<?
$dirs = array_filter(glob('/*'), 'is_dir'); //this code getting main root folders
print_r($dirs); // array showing root directory
?>
但我想從家裏所有的目錄/用戶名 這可能嗎?
我需要老年人幫助使根目錄下拉列表使用PHP。我幾乎創建了但有一個問題沒有得到根目錄。我想獲取所有目錄名稱
如家/ ABC /所有目錄我想
代碼示例
<?
$dirs = array_filter(glob('/*'), 'is_dir'); //this code getting main root folders
print_r($dirs); // array showing root directory
?>
但我想從家裏所有的目錄/用戶名 這可能嗎?
下面的代碼找到用戶目錄(在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>
儘管澄清問題,我不是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>';
}
is iframe code is related to your current problem?我不認爲這是。另外再描述一下: - 「但有一個問題沒有得到根目錄」。還有,你在傳遞'home/abc /'來獲取所有子目錄? –
我錯過了你的代碼。 – Neil
讓我用簡單的語言來描述,並更新我的代碼 –