PHP glob() 함수로 간편하게 파일 검색하기: 기본부터 활용까지

PHP의 glob() 함수는 파일 시스템에서 패턴에 맞는 파일명을 검색할 때 매우 유용하게 사용할 수 있는 함수입니다. 이 글에서는 glob() 함수의 기본적인 사용법과 장점, 그리고 몇 가지 예제 코드를 통해 자세히 알아보겠습니다.

glob() 함수란?

PHP의 glob() 함수는 디렉터리 내에서 파일 이름을 패턴 매칭 방식으로 검색하는 데 사용됩니다. 간단히 말해서, 특정 조건에 맞는 파일 이름을 손쉽게 찾을 수 있도록 도와줍니다. 이 함수는 와일드카드(*, ?)와 같은 패턴을 지원하며, 이를 통해 복잡한 파일 검색 작업을 간결하게 처리할 수 있습니다.

기본 문법

array glob(string $pattern, int $flags = 0);

glob() 함수의 장점

  1. 간결한 파일 검색: 복잡한 디렉터리 순회를 직접 구현할 필요 없이 간단히 파일 검색이 가능합니다.
  2. 와일드카드 지원: *?를 사용하여 다양한 파일 이름 패턴을 매칭할 수 있습니다.
  3. 플랫폼 독립성: 운영 체제에 따라 경로 구분자(/ 또는 \\)를 고려할 필요가 없습니다.

사용 예시

1. 특정 확장자를 가진 파일 찾기

$files = glob("/path/to/directory/*.txt");

foreach ($files as $file) {
    echo "$file\n"; // 예: /path/to/directory/example.txt
}

위 코드는 주어진 디렉터리에서 .txt 확장자를 가진 모든 파일을 검색합니다.

2. 다중 패턴 매칭

glob()는 한 번에 하나의 패턴만 지원하지만, 배열을 활용하여 다중 패턴 매칭을 간단히 처리할 수 있습니다.

$patterns = ["/path/to/directory/*.jpg", "/path/to/directory/*.png"];
$files = [];

foreach ($patterns as $pattern) {
    $files = array_merge($files, glob($pattern));
}

print_r($files);

이 코드는 .jpg.png 확장자를 가진 모든 파일을 검색하여 배열로 반환합니다.

3. 디렉터리 내 하위 폴더 포함 검색

기본 glob()는 하위 디렉터리를 검색하지 않습니다. 이를 해결하려면 GLOB_ONLYDIR 플래그와 재귀 함수를 조합하여 사용할 수 있습니다.

function getFilesRecursively($path, $pattern) {
    $files = glob("$path/$pattern");
    foreach (glob("$path/*", GLOB_ONLYDIR) as $dir) {
        $files = array_merge($files, getFilesRecursively($dir, $pattern));
    }
    return $files;
}

$allFiles = getFilesRecursively("/path/to/directory", "*.php");
print_r($allFiles);

위 코드는 주어진 디렉터리와 모든 하위 폴더에서 .php 파일을 검색합니다.

4. 플래그 활용

glob() 함수는 다양한 플래그를 지원합니다. 예를 들어, GLOB_MARK는 디렉터리 이름 뒤에 슬래시(/)를 추가합니다.

$items = glob("/path/to/directory/*", GLOB_MARK);

foreach ($items as $item) {
    echo "$item\n"; // 디렉터리는 뒤에 /가 붙음
}

주의사항

  1. 대용량 디렉터리: glob()는 대규모 디렉터리에서 성능 문제가 발생할 수 있습니다. 이 경우 scandir()RecursiveDirectoryIterator와 같은 대안을 고려하세요.
  2. OS 차이: glob()는 내부적으로 운영 체제의 파일 시스템 API를 사용하므로, 일부 시스템에서는 결과가 다를 수 있습니다. 대소문자 구분, 와일드카드 해석, 특수 문자 처리, 네트워크 파일 시스템 사용 여부를 고려하여 코드를 작성해야 합니다. 만약 정밀해야 한다면 RecursiveDirectoryIterator와 같은 방법을 사용하는 것이 좋습니다.

마무리

PHP의 glob() 함수는 파일 시스템에서 특정 패턴에 맞는 파일을 쉽게 검색할 수 있도록 도와주는 강력한 도구입니다. 와일드카드와 플래그를 조합하여 유연하게 사용할 수 있으며, 간결한 코드로 효율적인 파일 처리가 가능합니다. 그러나 성능 이슈나 대규모 디렉터리를 다룰 때, 여러 운영체제에서 돌아갈 코드를 작성할 때는 적절한 대안을 검토해야 합니다.

그러나 간단한 파일 검색에는 아주 편리한 도구죠.

👇 카테고리 글 목록

대표글

댓글 남기기