我想使用opendir()函数列出特定文件夹(即/www/site/)中仅为文件夹的内容,同时排除文件以及在Linux文件夹列表中出现的'.'和'..'文件夹。 我该如何实现这个功能?
foreach(glob('directory/*', GLOB_ONLYDIR) as $dir) {
$dir = str_replace('directory/', '', $dir);
echo $dir;
}
您可以使用带有GLOB_ONLYDIR的简单通配符,然后过滤结果目录。
查看PHP文档中有关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
以包含您不希望输出的文件或目录的名称。
function scandir_nofolders($d) {
return array_filter(scandir($d), function ($f) use($d) {
return ! is_dir($d . DIRECTORY_SEPARATOR . $f);
});
}
opendir
的程序员所需的。use($d)
。已更正。 - phihag仅列出文件夹(目录):
<?php
$Mydir = ''; ### OR MAKE IT 'yourdirectory/';
foreach(glob($Mydir.'*', GLOB_ONLYDIR) as $dir) {
$dir = str_replace($Mydir, '', $dir);
echo $dir;
}
?>
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++;
}
?>
这也可以用于表单中创建文件夹名称的下拉列表(这里是图像文件夹)。确保用户上传图像时将其推送到正确的文件夹中 :-)
<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>
.
和..
,而不是其他目录。 - phihag