PHP Получить все подкаталоги данного каталога

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

вы можете использовать glob () с опцией GLOB_ONLYDIR

или

 $dirs = array_filter(glob('*'), 'is_dir'); print_r( $dirs); 

Вот как вы можете получить только справочники с GLOB:

 $directories = glob($somePath . '/*' , GLOB_ONLYDIR); 

Класс Spl DirectoryIterator предоставляет простой интерфейс для просмотра содержимого каталогов файловой системы.

 $dir = new DirectoryIterator($path); foreach ($dir as $fileinfo) { if ($fileinfo->isDir() && !$fileinfo->isDot()) { echo $fileinfo->getFilename().'<br>'; } } 

Почти так же, как в предыдущем вопросе :

 $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($yourStartingPath), RecursiveIteratorIterator::SELF_FIRST); foreach($iterator as $file) { if($file->isDir()) { echo strtoupper($file->getRealpath()), PHP_EOL; } } 

Замените strtoupper на желаемую функцию.

Попробуйте этот код:

 <?php $path = '/var/www/html/project/somefolder'; $dirs = array(); // directory handle $dir = dir($path); while (false !== ($entry = $dir->read())) { if ($entry != '.' && $entry != '..') { if (is_dir($path . '/' .$entry)) { $dirs[] = $entry; } } } echo "<pre>"; print_r($dirs); exit; 

В массиве:

 function expandDirectoriesMatrix($base_dir, $level = 0) { $directories = array(); foreach(scandir($base_dir) as $file) { if($file == '.' || $file == '..') continue; $dir = $base_dir.DIRECTORY_SEPARATOR.$file; if(is_dir($dir)) { $directories[]= array( 'level' => $level 'name' => $file, 'path' => $dir, 'children' => expandDirectoriesMatrix($dir, $level +1) ); } } return $directories; } 

// доступ:

 $dir = '/var/www/'; $directories = expandDirectoriesMatrix($dir); echo $directories[0]['level'] // 0 echo $directories[0]['name'] // pathA echo $directories[0]['path'] // /var/www/pathA echo $directories[0]['children'][0]['name'] // subPathA1 echo $directories[0]['children'][0]['level'] // 1 echo $directories[0]['children'][1]['name'] // subPathA2 echo $directories[0]['children'][1]['level'] // 1 

Пример, чтобы показать все:

 function showDirectories($list, $parent = array()) { foreach ($list as $directory){ $parent_name = count($parent) ? " parent: ({$parent['name']}" : ''; $prefix = str_repeat('-', $directory['level']); echo "$prefix {$directory['name']} $parent_name <br/>"; // <----------- if(count($directory['children'])){ // list the children directories showDirectories($directory['children'], $directory); } } } showDirectories($directories); // pathA // - subPathA1 (parent: pathA) // -- subsubPathA11 (parent: subPathA1) // - subPathA2 // pathB // pathC 

Надлежащим образом

 /** * Get all of the directories within a given directory. * * @param string $directory * @return array */ function directories($directory) { $glob = glob($directory . '/*'); if($glob === false) { return array(); } return array_filter($glob, function($dir) { return is_dir($dir); }); } 

Вдохновленный Ларавелем

 <?php /*this will do what you asked for, it only returns the subdirectory names in a given path, and you can make hyperlinks and use them: */ $yourStartingPath = "photos\\"; $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($yourStartingPath), RecursiveIteratorIterator::SELF_FIRST); foreach($iterator as $file) { if($file->isDir()) { $path = strtoupper($file->getRealpath()) ; $path2 = PHP_EOL; $path3 = $path.$path2; $result = end(explode('/', $path3)); echo "<br />". basename($result ); } } /* best regards, Sanaan Barzinji Erbil */ ?> 

Вы можете попробовать эту функцию (требуется PHP 7)

 function getDirectories(string $path) : array { $directories = []; $items = scandir($path); foreach ($items as $item) { if($item == '..' || $item == '.') continue; if(is_dir($path.'/'.$item)) $directories[] = $item; } return $directories; } 

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

Вот несколько документов по этому поводу : http://php.net/manual/en/function.glob.php

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

 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; } 

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

 <?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 '</pre>' ?> 

Найдите все файлы и папки в указанном каталоге.

 function getAllSubdir($dir, &$fullDir = []) { $currentDir = scandir($dir); foreach ($currentDir as $key => $val) { $realpath = realpath($dir . DIRECTORY_SEPARATOR . $val); if (!is_dir($realpath) && $filename != "." && $filename != "..") { getDirRecursive($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)