PHP) glob 함수가 빈 배열을 반환 하는 경우?

카테고리 : 웹 프로그래밍/PHP

PHP에서 폴더 경로를 검색하려할때 glob 함수를 쓸 수 있습니다.

 

예를 들어, 아래와 같이 사용시

$files = glob("path/to/file/*");
//['path/to/file/1.txt','path/to/file/2.txt','path/to/file/3.txt']
  • path
    • to
      • file
        • 1.txt
        • 2.txt
        • 3.txt

위와 같은 문서 경로가 있을때 아래 내용을 배열로 반환합니다.

  • path/to/file/1.txt
  • path/to/file/2.txt
  • path/to/file/3.txt

 

그런데 [ ] { } 같은 대괄호,중괄호 기호가 포함되어있다면 검색이 안되고 빈 배열이 반환되는 경우가 있습니다.

$files = glob("path/to/[file]/*"); // []

 

[ ] { } 를 이스캐이프 해줘야 사용이 가능한데 윈도우에서는 아래와 같이 이용가능합니다.

$path = preg_replace('~[\[?{]~','[$0]',$path);
$files = glob($path.'/*');

 

최종 변환 결과

$files = glob("path/to/[file]/*"); // []

$files = glob("path/to/[[]file]/*");
//['path/to/[file]/1.txt','path/to/[file]/2.txt','path/to/[file]/3.txt']

$files = glob("path/to/{file}/*"); // []

$files = glob("path/to/[{]file}/*");
//['path/to/{file}/1.txt','path/to/{file}/2.txt','path/to/{file}/3.txt']

조금 특이하게 변환을 하는데 윈도우 기반 PHP에서는 이렇게 변환을 한다.

 

Linux/Unix 에서는 \를 폴더 기호로 안쓰기 때문에 \로 간단히 치환가능합니다.

$files = glob("path/to/[file]/*"); // []

$files = glob("path/to/\[file\]/*");
//['path/to/[file]/1.txt','path/to/[file]/2.txt','path/to/[file]/3.txt']

$files = glob("path/to/{file}/*"); // []

$files = glob("path/to/\{file\}/*");
//['path/to/{file}/1.txt','path/to/{file}/2.txt','path/to/{file}/3.txt']

 

저작권 보호안내
무단 전재, 재배포 행위는 금지됩니다. (글을 복사하여 게시금지)
본문의 일부(링크용 문장) 인용은 가능하지만, 출처와 링크(a 태그)를 남기셔야 됩니다.
(웹툴을 이용하고, 스크린샷/녹화하는것은 상관없습니다.)

예외적으로. 저에게 허락받은 경우에는 본문을 전재할 수 있습니다.

만약, 본문 공유를 원하신다면 링크 공유를 해주세요

저작권 정책 확인하기
링크 공유하기

 댓글