PHP의 fnmatch() 함수는 파일명 또는 문자열이 지정된 패턴과 일치하는지 검사하는 함수입니다. 셸에서 사용되는 와일드카드(wildcard) 방식의 패턴 매칭을 지원하며, 주로 특정 확장자나 이름 규칙을 가진 파일을 필터링할 때 유용하게 활용됩니다.
문법(Syntax)
fnmatch(pattern, string, flags)
매개변수(Parameters)
pattern − 비교에 사용할 검색 패턴입니다.
*,?,[abc]같은 와일드카드 문자를 포함할 수 있습니다.string − 패턴과 일치하는지 검사할 대상 문자열(파일명)입니다.
flags − 매칭 동작을 조정하는 선택적 옵션으로, 아래 값 중 하나를 지정할 수 있습니다.
FNM_NOESCAPE − 백슬래시(\)를 이용한 이스케이프 처리를 비활성화합니다.
FNM_PATHNAME − 문자열 내 슬래시(/)는 오직 패턴의 슬래시와만 일치하도록 제한합니다. 디렉터리 경로를 다룰 때 유용합니다.
FNM_PERIOD − 문자열 맨 앞의 마침표(.)는 반드시 패턴의 마침표와 정확히 일치해야 합니다. 숨김 파일(.htaccess 등) 처리 시 사용됩니다.
반환값(Return)
패턴과 문자열이 일치하면 TRUE를 반환하고, 일치하지 않으면 FALSE를 반환합니다.
예제(Example)
다음은 와일드카드 패턴을 활용한 기본 예제입니다.
<?php
$file = "organization.txt";
if (fnmatch("*organi[zs]ation", $file)) {
echo "Found!";
} else {
echo "Not found!";
}
?>
실행 결과(Output)
Not found!
결과 해설
위 예제에서 패턴 *organi[zs]ation은 "organization" 또는 "organisation"으로 끝나는 문자열과 일치합니다. 그러나 대상 문자열인 organization.txt는 뒤에 .txt라는 확장자가 붙어 있어 패턴의 끝 부분과 정확히 일치하지 않기 때문에 "Not found!"가 출력됩니다.
확장자까지 포함해서 매칭하고 싶다면 패턴 끝에 *를 추가하면 됩니다.
<?php
$file = "organization.txt";
if (fnmatch("*organi[zs]ation*", $file)) {
echo "Found!"; // Found! 출력
} else {
echo "Not found!";
}
?>
참고 사항
fnmatch() 함수는 POSIX 시스템에서는 항상 사용 가능하지만, Windows 환경에서도 PHP 5.3.0부터 사용할 수 있습니다.
디렉터리 내 파일 목록을 필터링할 때
glob()함수와 함께 자주 비교되며, glob()은 파일 목록 자체를 반환하는 반면 fnmatch()는 단순히 일치 여부만 판단한다는 차이가 있습니다.