[PHP] exec명령 내릴 때 인코딩 설정하기

한글 파일명으로 xlsx 파일들을 생성했다. 그리고 그걸 7z으로 압축했다. 7z 압축은 exec() 함수를 사용했다. 얼레, 그런데 다운받아서 압축을 푸니까 웬걸 한글 파일명이 다 깨진다. 한글 파일명이 깨질까 봐 7z으로 압축한 건데 왜지?!

커맨드라인 locale이 utf-8이 아니기 때문에 벌어진 일이다. exex() 함수는 새로운 터미널 세션을 만들어 실행을 하나 보다. 즉, 내가 터미널에 로그인했을 때와 환경이 같지 않다는 말이다. 그래서 환경설정을 해 줘야 하는데… locale은 아래처럼 PHP 명령을 내려서 설정해 주면 된다.

putenv("LANG=ko_KR.UTF-8");

이렇게 할 수도 있다.

setlocale(LC_ALL, 'ko_KR.utf8');

둘 간의 차이를 찾아 보진 않았다. setlocale 관련해서는 ‘PHP basename등 함수 사용시 한글깨짐(훼손) 문제’ 참고.

카테고리

17년차 풀스택 웹 개발자 Mytory입니다

웹 개발에서도 중요한 것은 개념입니다.
이 블로그에는 제가 개발하며 익힌 개념들을 정리합니다.

워드프레스를 오래 다뤄 왔고 강의도 두 편 찍었습니다.
– 인프런 “워드프레스 제대로 개발하기 어드민 편, 클라이언트 편
– 클래스101 “누구나 할 수 있는 워드프레스 홈페이지 만들기 – 기획부터 출시까지 한 방에 OK

유튜브 채널에 워드프레스 관련 팁들을 올리고 있습니다.

👉 소개 더 보기

대표글

댓글 남기기