DIR () 함수는 디렉토리 핸들을 열고 디렉토리 객체를 반환하는 데 사용됩니다. 디렉토리의 파일 및 서브 디렉토리 이름은이 객체의 read () 메소드를 통해 하나씩 읽을 수 있습니다.
구문 예 :
$dir = dir('길');
while (($file = $dir->read()) !== false) {
echo $file . PHP_EOL;
}
$dir->close();
read () 메소드는 두 특수 디렉토리를 포함하여 현재 디렉토리의 각 파일 이름을 반환합니다 . 그리고 .. , 그리고 제외해야합니다.
다음은 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 ()을 사용하여 디렉토리인지 확인하십시오.
모든 하위 디렉토리 이름을 배열에 저장하고 리턴합니다.
출력 페이지에서 각 하위 디렉토리에 대한 액세스 링크를 생성 해야하는 경우 샘플 코드는 다음과 같습니다.
<?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 으로 교체하여 쉬운 데모를 대체했습니다.
비 디렉토리 항목 필터 : 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);
?>
이 코드는보다 복잡한 디렉토리 구조를 처리 할 수 있도록 모든 수준에서 자막을 재귀 적으로 얻습니다.