PHP获取给定目录的所有子目录

我怎样才能得到一个给定的目录没有文件的所有子目录, . (当前目录)或.. (父目录),然后在函数中使用每个目录?

你可以使用glob()和GLOB_ONLYDIR选项

要么

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

以下是您可以如何检索仅有GLOB的目录:

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

几乎和你之前的问题一样 :

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

用你想要的functionreplacestrtoupper

Spl DirectoryIterator类提供了一个简单的界面来查看文件系统目录的内容。

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

试试这个代码:

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

受Laravel启发

 <?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 */ ?> 

你可以试试这个function(需要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

以recursion方式查找所有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; } 

如果你正在寻找recursion目录列出解决scheme。 使用下面的代码,我希望它可以帮助你。

 <?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)