Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 특정 디렉토리의 모든 하위 디렉토리를 가져오는 방법

PHP 개발 중 특정 디렉토리 안에 어떤 하위 디렉토리들이 있는지 확인해야 하는 경우가 자주 있습니다. 이럴 때 glob() 함수와 is_dir() 함수를 조합하거나, GLOB_ONLYDIR 플래그를 활용하면 아주 간단하게 해결할 수 있습니다.

방법 1: glob()과 is_dir()로 디렉토리만 필터링하기

먼저 glob() 함수로 대상 경로의 모든 항목(파일 및 디렉토리)을 가져온 뒤, array_filter()와 is_dir() 콜백을 사용해 디렉토리 항목만 남기는 방식입니다.

예제 코드

<?php
    $all_sub_dirs = array_filter(glob('*.*'), 'is_dir');
    print_r($all_sub_dirs);
?>

실행 결과

glob('*.*')가 현재 디렉토리의 파일과 폴더를 모두 반환하고, is_dir() 필터를 통해 디렉토리만 걸러집니다.

Array (
    [0] => demo.csv
    [1] => mark.php
    [2] => contact.txt
    [3] => source.txt
)

방법 2: GLOB_ONLYDIR 플래그로 디렉토리만 추출하기

파일은 제외하고 오직 디렉토리 목록만 필요하다면, glob() 함수의 두 번째 인자에 GLOB_ONLYDIR 플래그를 지정하는 것이 더 깔끔하고 효율적인 방법입니다.

예제 코드

<?php
    $all_dirs = glob($somePath . '/*', GLOB_ONLYDIR);
    print_r($all_dirs);
?>

실행 결과

GLOB_ONLYDIR 옵션 덕분에 해당 경로 아래의 디렉토리만 배열로 반환됩니다.

Array (
    [0] => example
    [1] => exam
    [2] => log
)

참고: 하위 디렉토리까지 재귀적으로 탐색하기

위 방법들은 바로 아래 단계의 디렉토리만 조회합니다. 만약 모든 하위 디렉토리를 한 번에 탐색하고 싶다면 재귀적 반복자인 RecursiveDirectoryIterator나 SPL을 활용하는 것이 좋습니다.

<?php
    $iterator = new RecursiveDirectoryIterator($somePath, FilesystemIterator::SKIP_DOTS);
    $dirs = [];
    foreach ($iterator as $item) {
        if ($item->isDir()) {
            $dirs[] = $item->getPathname();
        }
    }
    print_r($dirs);
?>

이처럼 상황에 맞는 함수를 선택하면 디렉토리 탐색 작업을 훨씬 수월하게 처리할 수 있습니다. 단순한 목록 조회에는 glob(), 전체 트리 탐색에는 RecursiveDirectoryIterator를 활용해 보세요.