PHP opendir () для отображения только папок - PullRequest
15 голосов
/ 27 июня 2011

Я хотел бы использовать opendir () для отображения списка только папок в определенной папке (например, / www / site /).Я хотел бы исключить файлы из списка также в '.'и «..» папки, которые появляются в списке папок Linux.Как бы я поступил так?

Ответы [ 6 ]

18 голосов
/ 27 июня 2011

Ознакомьтесь с документами 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, чтобы включить именафайлы или каталог, который вы не хотите выводить.

17 голосов
/ 05 февраля 2013
foreach(glob('directory/*', GLOB_ONLYDIR) as $dir) {
    $dir = str_replace('directory/', '', $dir);
    echo $dir;
}

Вы можете просто использовать glob с GLOB_ONLYDIR, а затем фильтровать полученные каталоги

8 голосов
/ 27 июня 2011
function scandir_nofolders($d) {
   return array_filter(scandir($d), function ($f) use($d) {
       return ! is_dir($d . DIRECTORY_SEPARATOR . $f);
   });
}

Эта функция возвращает массив, который вы можете перебирать или хранить где-то, что и хотят 99,37% всех программистов, использующих opendir.

6 голосов
/ 28 марта 2013

Список только папок (каталогов):

<?php
$Mydir = ''; ### OR MAKE IT 'yourdirectory/';

foreach(glob($Mydir.'*', GLOB_ONLYDIR) as $dir) {
    $dir = str_replace($Mydir, '', $dir);
    echo $dir;
}
?>
2 голосов
/ 25 ноября 2015

Попробуйте это с помощью функции 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++;
    }
    ?>

Вышеупомянутый код работал для меня для списка папок в текущем каталоге, и я разработал код для открытия каждой папки в новой вкладке в том же браузере.Это показывает только каталоги.

1 голос
/ 01 декабря 2015

Может также использоваться в формах для создания выпадающего списка имен папок (здесь это папка с изображениями).Гарантирует, что пользователь, загружающий изображение, помещает его в нужную папку: -)

<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>
...