我想使用opendir()仅列出特定文件夹中的文件夹(即/ www / site /)。我想从列表中排除文件以及'。'以及出现在linux文件夹列表中的'..'文件夹。我该怎么做呢?
答案 0 :(得分:18)
查看PHP docs for readdir()。它包含了一个恰当的例子。
为了完整性:
<?php
if ($handle = opendir('.')) {
$blacklist = array('.', '..', 'somedir', 'somefile.php');
while (false !== ($file = readdir($handle))) {
if (!in_array($file, $blacklist)) {
echo "$file\n";
}
}
closedir($handle);
}
?>
只需将opendir('.')
更改为您的目录,即opendir('/www/sites/')
,然后更新$blacklist
即可包含您不希望输出的文件或目录的名称。
答案 1 :(得分:17)
foreach(glob('directory/*', GLOB_ONLYDIR) as $dir) {
$dir = str_replace('directory/', '', $dir);
echo $dir;
}
您可以使用GLOB_ONLYDIR简单地使用glob,然后过滤生成的目录
答案 2 :(得分:8)
function scandir_nofolders($d) {
return array_filter(scandir($d), function ($f) use($d) {
return ! is_dir($d . DIRECTORY_SEPARATOR . $f);
});
}
这个函数返回一个可以迭代或存储在某个地方的数组,这是99.37%的使用opendir
的程序员想要的。
答案 3 :(得分:6)
仅列出文件夹(目录):
<?php
$Mydir = ''; ### OR MAKE IT 'yourdirectory/';
foreach(glob($Mydir.'*', GLOB_ONLYDIR) as $dir) {
$dir = str_replace($Mydir, '', $dir);
echo $dir;
}
?>
答案 4 :(得分:2)
使用glob('*')
函数
<?php
$dirs = array_filter(glob('*'), 'is_dir');
$i = 1;
foreach ($dirs as $value) {
echo $i . '. <a href = "http://localhost/' . $value . '" target = "_blank">' . $value . '</a><br>';
$i++;
}
?>
上面的代码对我有用,可以列出当前目录中的文件夹,并且我进一步开发了代码,用于在同一浏览器的新选项卡中打开每个文件夹。这只显示目录。
答案 5 :(得分:1)
也可以在表单中用于创建文件夹名称下拉列表(这里是images文件夹)。确保上传图像的用户将其推送到正确的文件夹: - )
<select name="imgfolder">
<option value="genimage">General Image</option>
<?php
$Mydir = '../images/'; // use 'anydirectory_of_your_choice/';
foreach(glob($Mydir.'*', GLOB_ONLYDIR) as $dir) {
$dirname = basename($dir) ;
echo '<option value="' . $dirname . '">' . $dirname . '</option>' ;
}
?>
</select>