我想获取所有目录名称
问题描述:
我需要老年人帮助使根目录下拉列表使用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
让我用简单的语言来描述,并更新我的代码 –