PHP opendir()仅列出文件夹

时间:2011-06-27 19:23:19

标签: php opendir

我想使用opendir()仅列出特定文件夹中的文件夹(即/ www / site /)。我想从列表中排除文件以及'。'以及出现在linux文件夹列表中的'..'文件夹。我该怎么做呢?

6 个答案:

答案 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 . '. &nbsp; <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>