특정 디렉토리 내의 파일과 서브디렉토리 중 특정 패턴을 찾을 경우가 종종 있습니다. 기존의 시스템 함수를 이용하여 처리하려면 코드가 꽤 길어지지만, SPL(Standard PHP Library)를 이용하면 짧으면서 우아하게 처리 할 수 있습니다.

1
2
3
4
5
6
7
8
<?php
$recurDirIter = new RecursiveDirectoryIterator('.');
$recurIterIter= new RecursiveIteratorIterator($recurDirIter);
$regexIter = new RegexIterator($recurIterIter, '/^.+\.(jpg|png)$/i', RecursiveRegexIterator::GET_MATCH);

foreach ($regexIter as $filename) {
    echo $filename[0].PHP_EOL;
}

우선 RecursiveDirectoryIterator 클래스에 매개변수로 찾을 디렉토리를 넣고 인스턴스를 생성합니다. 그 다음 RecursiveIteratorIterator 클래스에 앞서 생성한 RecursiveDirectoryIterator를 넣고 인스턴스를 생성합니다.

마지막으로 특정 패턴만을 걸러내기 위해 RecursiveIteratorIterator를 매개변수로 넣은 RegexIterator 인스턴스를 생성하면 됩니다. 이렇게 생성한 인스턴스는 foreach 구문을 통해 특정 패턴에 일치하는 특정 디렉토리 내 모든 파일을 차례대로 순회합니다.

SPL 등장 전에는 이런 작업을 하려면 시스템 함수를 이용해서 일일히 코딩을 하거나 이미 만들어진 라이브러리를 이용해야 했습니다만, 지금은 SPL의 다양한 Iterator 클래스를 조합하여 사용하면 쉽게 처리 할 수 있습니다.