PHP의 대부분 핵심 함수는 Latin-1 이외의 문자셋을 제대로 처리하지 못합니다. 그렇기 때문에 pathinfo() 함수를 호출하기 전에 setlocale()로 로케일(locale)을 지정해 주면, 파일명이 UTF-8로 인코딩되어 있어도 올바른 파일 이름을 반환받을 수 있습니다.
로케일 기본 동작
PHP는 기본적으로 'C' 로케일 환경에서 실행됩니다. 반면 CLI(커맨드 라인) 스크립트는 시스템 설정에 따라 기본적으로 UTF-8 로케일로 실행되는 경우가 많습니다.
따라서 웹 서버 환경에서 UTF-8 파일명을 다루려면, pathinfo() 등의 함수를 호출하기 전에 서버의 로케일을 'C'에서 'C.UTF-8' 또는 'en_US.UTF-8'로 변경해 주어야 합니다.
적용 예제 코드
setlocale(LC_ALL,'en_US.UTF-8'); pathinfo($OriginalName, PATHINFO_FILENAME); pathinfo($OriginalName, PATHINFO_BASENAME);
위 코드처럼 스크립트 상단에서 setlocale(LC_ALL, 'en_US.UTF-8')을 먼저 호출하면, 이후 PATHINFO_FILENAME이나 PATHINFO_BASENAME 옵션으로 한글 등 멀티바이트 문자가 포함된 파일명도 정확하게 가져올 수 있습니다.