php에서 파일을 서버에 업로드하기
한글 파일명이 이슈가 된다.
1 min readSep 11, 2018
우선 간단히 php: POST 방식 업로드를 읽어보자.
파일은 form에 넣어서 multipart/form-data로 post 방식으로 보내면 되고, 서버는 이 파일을 받아서 원하는 위치에 저장하면 된다. 그리고 이걸 해주는 함수가 move_uploaded_file()다. 그런데 그 간단한 과정이 순탄치 않은데.. 아래 코드를 보자.
1. 파일은 tmp_name으로 서버에 임시로 저장된다.
2. 이걸 원하는 위치로 옮기기만 하면 되는데
3. 우선 name에 들어있는 파일명을 따와야 하고
4. 3의 파일명으로 rename하여 옮겨주면 된다.
3을 위해 basename()이라는 함수가 있다. 그런데 이게 한글일 경우 영 잘 동작하지 않는다. 위의 코드처럼 그냥 따로 구현하는게 제일 편하고 확실했다. (#11)
4의 경우 인코딩 이슈가 있다. 이게 뭐냐면.. 파일은 http로 전송받았고, 인코딩은 UTF-8로 되어 있는 것. 하지만 지금 서버는 로컬의 Windows 7이고, 파일 시스템은 CP949로 되어 있다. 그 차이를 위해 이렇게 인코딩을 해줘야 한다. iconv()를 한 번 걸쳐줘야 한다. (#8)
이제 준비가 잘 됐으니까, 2를 해주면 끝난다. (#5)