SPL을 사용하여 전체 디렉토리 트리를 검색하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/2418068

  •  19-09-2019
  •  | 
  •  

문제

전체 디렉토리 트리를 사용하여 어떻게 검색 할 수 있습니까? SPL, 아마도 사용 RecursiveDirectoryIterator 그리고 RecursiveIteratorIterator?

도움이 되었습니까?

해결책

기본적으로 RecursiveIteratorIterator 사용합니다 LEAVES_ONLY 두 번째 논쟁은 __construct. 이것은 파일 만 반환한다는 것을 의미합니다. 파일을 포함하려는 경우 그리고 디렉토리 (적어도 그게 내가 생각하는 것입니다. 가득한 디렉토리 트리), 당신은해야 할 것입니다 :

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::SELF_FIRST
);

그리고 당신은 할 수 있습니다 foreach 그것에. 디렉토리 트리를 출력하는 대신 디렉토리 트리를 반환하려면 배열에 저장할 수 있습니다 (예 :

foreach ($iterator as $fileObject) {
    $files[] = $fileObject;
    // or if you only want the filenames
    $files[] = $fileObject->getPathname();
}

배열을 만들 수도 있습니다 $fileObjects 없이 foreach 수행하여 :

$files[] = iterator_to_array($iterator);

디렉토리 만 반환하기를 원한다면 foreach 위에 $iterator 이와 같이:

foreach ($iterator as $fileObject) {
    if ($fileObject->isDir()) {
        $files[] = $fileObject;
    }
}

다른 팁

당신은 단지 당신이 원하는 모든 것을 할 수 있습니다.

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top