현재 위치: > 최신 기사 목록> DIR 함수를 통해 지정된 디렉토리에서 하위 디렉토리를 읽는 방법

DIR 함수를 통해 지정된 디렉토리에서 하위 디렉토리를 읽는 방법

gitbox 2025-05-31

1. DIR () 함수 소개

DIR () 함수는 디렉토리 핸들을 열고 디렉토리 객체를 반환하는 데 사용됩니다. 디렉토리의 파일 및 서브 디렉토리 이름은이 객체의 read () 메소드를 통해 하나씩 읽을 수 있습니다.

구문 예 :

 $dir = dir('길');
while (($file = $dir->read()) !== false) {
    echo $file . PHP_EOL;
}
$dir->close();

read () 메소드는 두 특수 디렉토리를 포함하여 현재 디렉토리의 각 파일 이름을 반환합니다 . 그리고 .. , 그리고 제외해야합니다.


2. 모든 하위 디렉터에 대한 구현 예제를 받으십시오

다음은 DIR () 함수를 사용하여 지정된 디렉토리에서 모든 하위 디렉토리를 얻는 샘플 코드입니다.

 <?php
function getSubDirectories($path) {
    $subDirs = [];

    if (!is_dir($path)) {
        return $subDirs; // 길不是目录,빈 배열을 반환하십시오
    }

    $dir = dir($path);
    while (($entry = $dir->read()) !== false) {
        // 들어오지 못하게 하다 . 그리고 ..
        if ($entry === '.' || $entry === '..') {
            continue;
        }

        $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
        if (is_dir($fullPath)) {
            $subDirs[] = $entry;
        }
    }
    $dir->close();

    return $subDirs;
}

// 테스트 전화
$path = '/var/www/html';
$dirs = getSubDirectories($path);
print_r($dirs);
?>

이 코드에서 :

  • 먼저 입력 경로가 디렉토리인지 확인하십시오.

  • dir ()을 통해 디렉토리 핸들을 엽니 다.

  • 각 항목을 읽으십시오 . 그리고 ...

  • IS_DIR ()을 사용하여 디렉토리인지 확인하십시오.

  • 모든 하위 디렉토리 이름을 배열에 저장하고 리턴합니다.


3. URL 예제 결합

출력 페이지에서 각 하위 디렉토리에 대한 액세스 링크를 생성 해야하는 경우 샘플 코드는 다음과 같습니다.

 <?php
$path = '/var/www/html';
$dir = dir($path);
while (($entry = $dir->read()) !== false) {
    if ($entry === '.' || $entry === '..') {
        continue;
    }
    $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
    if (is_dir($fullPath)) {
        echo '<a href="http://gitbox.net/' . $entry . '">' . $entry . '</a><br>';
    }
}
$dir->close();
?>

여기서 원래 URL 도메인 이름을 Gitbox.net 으로 교체하여 쉬운 데모를 대체했습니다.


4. 실용적인 팁

  • 비 디렉토리 항목 필터 : IS_DIR () 을 통해 필터 디렉토리 만 검색되도록 필터링하십시오.

  • 재귀 트래버스 : 모든 레벨의 하위 디렉토리를 얻으려면 디렉토리라고 판단 한 후에는 기능을 재귀 적으로 호출 할 수 있습니다.

  • 경로 스티치 : Directory_Separator를 사용하여 크로스 플랫폼 호환성을 보장합니다.

  • 예외 처리 : 디렉토리가 존재하는지 판단하는 것이 가장 좋습니다. 디렉토리가 오류를 피하기 위해 열기 전에 읽을 수 있습니다.


위의 기술과 결합 된 DIR () 함수를 사용하여 대부분의 시나리오의 요구를 충족시키기 위해 디렉토리 트래버스 및 하위 디렉토리 획득을 쉽게 구현할 수 있습니다.


 <?php
function getAllSubDirsRecursive($path) {
    $result = [];

    if (!is_dir($path)) {
        return $result;
    }

    $dir = dir($path);
    while (($entry = $dir->read()) !== false) {
        if ($entry === '.' || $entry === '..') {
            continue;
        }

        $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
        if (is_dir($fullPath)) {
            $result[] = $entry;
            // 하위 디렉토리를 얻기위한 재귀 호출
            $result = array_merge($result, getAllSubDirsRecursive($fullPath));
        }
    }
    $dir->close();

    return $result;
}

$dirs = getAllSubDirsRecursive('/var/www/html');
print_r($dirs);
?>

이 코드는보다 복잡한 디렉토리 구조를 처리 할 수 ​​있도록 모든 수준에서 자막을 재귀 적으로 얻습니다.