[php] 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


답변

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