PHP Получить все подкаталоги данного каталога - PullRequest
124 голосов
/ 26 марта 2010

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

Ответы [ 15 ]

0 голосов
/ 02 марта 2018

Я написал сканер, который работает очень хорошо и сканирует каталоги и подкаталоги в каждом каталоге и файлах.

function scanner($path){
    $result = [];
    $scan = glob($path . '/*');
    foreach($scan as $item){
        if(is_dir($item))
            $result[basename($item)] = scanner($item);
        else
            $result[] = basename($item);
    }
    return $result;
}

Пример

var_dump(scanner($path));

возвращается:

array(6) {
  ["about"]=>
  array(2) {
    ["factory"]=>
    array(0) {
    }
    ["persons"]=>
    array(0) {
    }
  }
  ["contact"]=>
  array(0) {
  }
  ["home"]=>
  array(1) {
    [0]=>
    string(5) "index.php"
  }
  ["projects"]=>
  array(0) {
  }
  ["researches"]=>
  array(0) {
  }
  [0]=>
  string(5) "index.php"
}
0 голосов
/ 27 мая 2017

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

<code><?php
/**
 * Function for recursive directory file list search as an array.
 *
 * @param mixed $dir Main Directory Path.
 *
 * @return array
 */
function listFolderFiles($dir)
{
    $fileInfo     = scandir($dir);
    $allFileLists = [];

    foreach ($fileInfo as $folder) {
        if ($folder !== '.' && $folder !== '..') {
            if (is_dir($dir . DIRECTORY_SEPARATOR . $folder) === true) {
                $allFileLists[$folder . '/'] = listFolderFiles($dir . DIRECTORY_SEPARATOR . $folder);
            } else {
                $allFileLists[$folder] = $folder;
            }
        }
    }

    return $allFileLists;
}//end listFolderFiles()


$dir = listFolderFiles('your searching directory path ex:-F:\xampp\htdocs\abc');
echo '<pre>';
print_r($dir);
echo '
?>
0 голосов
/ 07 декабря 2016

Поиск всех файлов PHP рекурсивно. Логика должна быть достаточно простой, чтобы ее можно было настроить, и она стремится быть быстрой (э), избегая вызовов функций.

function get_all_php_files($directory) {
    $directory_stack = array($directory);
    $ignored_filename = array(
        '.git' => true,
        '.svn' => true,
        '.hg' => true,
        'index.php' => true,
    );
    $file_list = array();
    while ($directory_stack) {
        $current_directory = array_shift($directory_stack);
        $files = scandir($current_directory);
        foreach ($files as $filename) {
            //  Skip all files/directories with:
            //      - A starting '.'
            //      - A starting '_'
            //      - Ignore 'index.php' files
            $pathname = $current_directory . DIRECTORY_SEPARATOR . $filename;
            if (isset($filename[0]) && (
                $filename[0] === '.' ||
                $filename[0] === '_' ||
                isset($ignored_filename[$filename])
            )) 
            {
                continue;
            }
            else if (is_dir($pathname) === TRUE) {
                $directory_stack[] = $pathname;
            } else if (pathinfo($pathname, PATHINFO_EXTENSION) === 'php') {
                $file_list[] = $pathname;
            }
        }
    }
    return $file_list;
}
0 голосов
/ 05 ноября 2015

Поиск всех файлов и папок в указанном каталоге.

function scanDirAndSubdir($dir, &$fullDir = array()){
    $currentDir = scandir($dir);

    foreach ($currentDir as $key => $val) {
        $realpath = realpath($dir . DIRECTORY_SEPARATOR . $val);
        if (!is_dir($realpath) && $filename != "." && $filename != "..") {
            scanDirAndSubdir($realpath, $fullDir);
            $fullDir[] = $realpath;
        }
    }

    return $fullDir;
}

var_dump(scanDirAndSubdir('C:/web2.0/'));

Образец:

array (size=4)
  0 => string 'C:/web2.0/config/' (length=17)
  1 => string 'C:/web2.0/js/' (length=13)
  2 => string 'C:/web2.0/mydir/' (length=16)
  3 => string 'C:/web2.0/myfile/' (length=17)
0 голосов
/ 16 апреля 2015

Вы можете использовать функцию glob () для этого.

Вот некоторая документация по этому вопросу: http://php.net/manual/en/function.glob.php

...