PHP copy 함수 한글 파일명 인코딩 오류(No such file or directory) 해결 방법
페이지 정보

본문
그누보드 기능을 적용하거나 PHP 스크립트로 파일을 다룰 때, 한글 파일명 경로 문제로 발생하는 'No such file or directory' 오류의 원인과 iconv 함수를 이용한 해결 방법을 알아봅니다.
PHP copy 함수 한글 파일명 복사 오류 원인
PHP의 copy 함수를 사용하여 한글 파일명을 가진 파일을 복사할 때 Warning: copy(... failed to open stream: No such file or directory) 오류가 발생하는 주된 원인은 서버 파일 시스템의 인코딩과 PHP 스크립트 문자셋 간의 불일치 때문입니다.
실행 결과 영문 파일명은 정상적으로 복사되지만, 한글이 포함된 파일명은 문자셋 차이로 인해 서버가 실제 경로와 파일을 올바르게 인식하지 못해 해당 오류가 발생하게 됩니다.
PHP copy 함수 사용 시 한글 파일명 인코딩 오류 해결 방법
PHP의 copy 함수를 이용해 한글 파일명이 포함된 파일을 복사할 때 Warning: copy(... failed to open stream: No such file or directory) 오류가 발생하는 원인은 서버 파일 시스템의 인코딩과 PHP 스크립트 문자셋 간의 불일치 때문입니다.
1. 현재 서버 인코딩 확인
오류를 해결하기 전, 서버의 언어 및 인코딩 설정 유형을 확인합니다. 서버 환경(국내/해외 서버 및 운영체제 설정)에 따라 input_encoding, output_encoding, internal_encoding 값이 ISO-8859-1 또는 UTF-8 등으로 다르게 표시될 수 있습니다.
2. iconv 변환 구문 적용
파일 경로 또는 파일명 문자셋을 서버 환경에 맞게 iconv 함수로 변환하여 복사 구문을 실행합니다. 복사가 정상적으로 되지 않는 경우 아래의 변환 방식을 순서대로 적용해 볼 수 있습니다.
- 기본 CP949 변환 적용:
$src_file = iconv("utf-8", "CP949", $src_file); - EUC-KR 변환 적용:
$src_file = iconv("utf-8", "euc-kr", $src_file); - 조건별 분기 처리 예시:
if ($file_change_hangul == 1) { $src_file = iconv("UTF-8", "CP949", $src_file); } elseif ($file_change_hangul == 2) { $src_file = iconv("UTF-8", "EUC-KR", $src_file); } elseif ($file_change_hangul == 3) { $src_file = iconv("EUC-KR", "UTF-8", $src_file); } elseif ($file_change_hangul == 4) { $src_file = iconv("ISO-8859-1", "UTF-8", $src_file); } elseif ($file_change_hangul == 5) { $src_file = iconv("UTF-8", "ISO-8859-1", $src_file); }
주의사항
국내 및 해외 서버 환경과 OS 설정에 따라 적절한 인코딩 타겟(CP949, EUC-KR 등)이 다를 수 있으므로 운영 중인 서버 환경에 맞춰 테스트를 거쳐야 합니다.
서버 환경에 따른 인코딩 타겟 분기 처리 방법
국내 및 해외 서버 환경이나 운영체제(OS) 및 glibc 설정에 따라 파일 시스템이 요구하는 인코딩 타겟(CP949, EUC-KR 등)이 다를 수 있어 기본 설정만으로 복사가 실패할 수 있습니다. 이 경우 서버 환경 차이에 맞춰 $file_change_hangul 조건값에 따라 인코딩 변환 방식을 분기하여 처리할 수 있습니다.
분기 처리 예외 적용 방법
기본 인코딩 변환으로 복사가 되지 않을 때는 아래와 같이 조건문을 구성하여 서버 환경에 적합한 인코딩 타겟을 적용합니다.
if ($file_change_hangul == 1) {
$src_file = iconv("UTF-8","CP949",$src_file);
} elseif ($file_change_hangul == 2) {
$src_file = iconv("UTF-8","EUC-KR",$src_file);
} elseif ($file_change_hangul == 3) {
$src_file = iconv("EUC-KR","UTF-8",$src_file);
} elseif ($file_change_hangul == 4) {
$src_file = iconv("ISO-8859-1","UTF-8",$src_file);
} elseif ($file_change_hangul == 5) {
$src_file = iconv("UTF-8","ISO-8859-1",$src_file);
}
PHP 파일 복사 시 한글 파일명 인코딩 오류 해결 가이드
| 내 상황 | 선택 기준 | 다음 행동 |
|---|---|---|
PHP copy() 실행 시 한글 파일명에서 'No such file or directory' 오류 발생 | 서버 파일 시스템 인코딩과 PHP 스크립트 문자셋 불일치 확인 | iconv() 함수를 사용하여 파일명 문자셋을 서버 환경에 맞게 변환 적용 |
| 기본 CP949 변환 후에도 복사 실패 | 국내/해외 서버 및 OS 환경에 따른 인코딩 타겟 차이 | EUC-KR 또는 서버 환경별 인코딩 조건값($file_change_hangul)에 따른 분기 처리 구문 적용 |
실전 FAQ
Q. 영문 파일은 복사되는데 한글 파일만 경고 없이 복사가 안 될 때는 어떻게 하나요?
- 서버의 언어 설정(
input_encoding,output_encoding,internal_encoding)이ISO-8859-1등으로 되어 있는지 확인하십시오. 서버 환경에 따라 경고 문구 없이 실패할 수 있으므로,iconv()를 통해 파일명을 서버 인코딩에 맞춰 변환하는 과정이 필수적입니다.
Q. CP949나 EUC-KR로 변환해도 계속 오류가 발생하면 어떻게 하나요?
- 서버의 glibc 버전이나 OS 설정에 따라 적절한 인코딩 타겟이 다를 수 있습니다.
ISO-8859-1등 다른 문자셋과의 상호 변환 조건문($file_change_hangul분기 처리)을 순차적으로 적용하여 서버가 인식하는 인코딩 방식을 찾아야 합니다.
함께 보면 좋은 글
참고자료
기타 참고자료
- 이전글그누보드 게시판 페이징 Division by zero 오류 해결 방법 26.10.17
- 다음글PHP 5.2에서 7.2 환경으로 이전 시 MDB2 라이브러리 호환성 오류 해결 방법 26.10.14
댓글목록
등록된 댓글이 없습니다.