как вывести список всех папок и подпапок в директории php

354
12 сентября 2017, 09:57

подскажите пожалуйста, как можно получить в массив список всех подпапок, содержащихся в папке, при этом чтобы скрипт не отваливался при попытке зайти в папку, на которую у него нет прав на чтение, а также чтобы сохранял работоспособность от версии php 5.2 до версии 7.1.

Answer 1
    $root = '/etc';
    $iter = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($root, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::SELF_FIRST,
// при блоке прав чтения не отвалится
        RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied" (>>на которую у него нет прав на чтение)
    );
    $paths = array($root);
    foreach ($iter as $path => $dir) {
        if ($dir->isDir()) {
            $paths[] = $path;
        }
    }
    print_r($paths);

Результат:

Array
(
    [0] => /etc
    [1] => /etc/rc2.d
    [2] => /etc/luarocks
    ...
    [17] => /etc/php5
    [18] => /etc/php5/apache2
    [19] => /etc/php5/apache2/conf.d
    [20] => /etc/php5/mods-available
    [21] => /etc/php5/conf.d

Источник

Можно смело использовать glob() работает с (PHP 4 >= 4.3.0, PHP 5, PHP 7). Вот хороший пример с glob.

function glob_recursive($pattern, $flags = 0)
   {
     $files = glob($pattern, $flags);
     foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir)
     {
       $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
     }
     return $files;
   }

И еще пример.

    foreach($files as $key => $value){
        $path = realpath($dir.DIRECTORY_SEPARATOR.$value);
        if(!is_dir($path)) {
            $results[] = $path;
        } else if($value != "." && $value != "..") {
            getDirContents($path, $results);
            $results[] = $path;
        }
    }
    return $results;
}
var_dump(getDirContents('/xampp/htdocs/WORK'));

Результат:

array (size=12)
  0 => string '/xampp/htdocs/WORK/iframe.html' (length=30)
  1 => string '/xampp/htdocs/WORK/index.html' (length=29)
  2 => string '/xampp/htdocs/WORK/js' (length=21)
  3 => string '/xampp/htdocs/WORK/js/btwn.js' (length=29)
  4 => string '/xampp/htdocs/WORK/js/qunit' (length=27)

Источник

READ ALSO
Стоит ли использовать isset

Стоит ли использовать isset

Мои настройки php и настройки php на хостинге не ругаются если использовать записьif ($_POST['specialist_id']) {

330
Opencart,редкая ошибка

Opencart,редкая ошибка

Добрый день,после установки модуля popup корзины на опенкарт возникла ошибка,то есть при загрузке страницы модулей выдает текст:"Страница,...

311
не могу получить данные из xml , php

не могу получить данные из xml , php

У меня есть такой файл из 1C, но не могу получить данные из xml:

301
Нужна помощь с функциями gets_s () и scanf_s ()

Нужна помощь с функциями gets_s () и scanf_s ()

При использовании функции gets_s () с какими разделителями может происходить считывание информации с консоли? Какой тип данных возвращает функция...

397