PHP 파일 업로드 처리 및 $FILES 배열 활용 가이드
페이지 정보

본문
PHP 파일 업로드 처리 및 $_FILES 배열 활용 가이드
그누보드 환경 및 PHP 웹 개발에서 파일 업로드 기능을 구현하고, 업로드 실패 시 발생하는 $_FILES 에러 코드를 확인하여 문제를 해결하는 방법을 알아봅니다.
PHP에서 HTTP POST 방식을 통해 파일이 업로드되면, 서버 스크립트는 전역 배열인 $_FILES를 통해 업로드된 파일의 정보를 수신합니다. PHP 4.1.0 이상 환경부터는 자동 전역 변수인 $_FILES 사용이 권장됩니다.
$_FILES 배열의 주요 항목
HTML 폼의 파일 입력 필드 이름을 userfile이라고 가정할 때, $_FILES['userfile'] 배열은 다음과 같은 하위 세그먼트로 구성됩니다.
$_FILES['userfile']['name']: 클라이언트 머신(사용자 PC)에 존재하는 파일의 원래 이름입니다.$_FILES['userfile']['type']: 브라우저가 제공하는 파일의 MIME 형식입니다 (예:image/gif).$_FILES['userfile']['size']: 업로드된 파일의 크기(바이트 단위)입니다.$_FILES['userfile']['tmp_name']: 서버에 저장된 업로드 파일의 임시 파일 경로입니다. 별도 설정이 없다면 서버의 기본 임시 디렉토리에 저장됩니다.$_FILES['userfile']['error']: 파일 업로드와 관련된 에러 코드입니다. 성공 시0(UPLOAD_ERR_OK)을 반환하며, 문제가 발생하면 1~8 사이의 정수 코드를 반환하여 원인을 파악할 수 있습니다.
PHP 파일 업로드 에러 코드(0~8)별 의미와 대응 방법
PHP로 파일을 업로드할 때 발생하는 에러는 파일 배열의 ['error'] 세그먼트($_FILES['userfile']['error'])를 통해 확인할 수 있습니다. PHP 4.2.0 버전부터 제공되는 이 에러 코드는 0부터 8까지의 값으로 반환되며, 각 코드별 의미와 이에 따른 대응 방법은 다음과 같습니다.
에러 코드별 의미 및 대응
- 값: 0 (
UPLOAD_ERR_OK)- 의미: 오류 없이 파일 업로드가 성공했습니다.
- 다음 행동:
move_uploaded_file()함수를 사용하여 임시 디렉토리에 있는 파일을 최종 목적지 경로로 안전하게 이동시킵니다.
- 값: 1 (
UPLOAD_ERR_INI_SIZE)- 의미: 업로드한 파일이
php.ini파일의upload_max_filesize지시어에서 설정된 최대 크기를 초과했습니다. - 다음 행동: 서버의
php.ini설정 파일에서upload_max_filesize값을 더 큰 용량으로 수정하거나 업로드 파일 크기를 줄여야 합니다.
- 의미: 업로드한 파일이
- 값: 2 (
UPLOAD_ERR_FORM_SIZE)- 의미: 업로드한 파일이 HTML 폼에서
MAX_FILE_SIZE지시어로 지정한 최대 크기보다 큽니다. - 다음 행동: HTML 폼의
MAX_FILE_SIZE필드 값을 조정하거나 업로드 파일의 용량을 확인합니다.
- 의미: 업로드한 파일이 HTML 폼에서
- 값: 3 (
UPLOAD_ERR_PARTIAL)- 의미: 파일이 일부분만 전송되었습니다.
- 다음 행동: 네트워크 상태를 확인하고 파일을 다시 업로드합니다.
- 값: 4 (
UPLOAD_ERR_NO_FILE)- 의미: 파일이 전송되지 않았습니다(폼에서 어떠한 파일도 선택하지 않은 경우).
- 다음 행동: 사용자가 파일을 올바르게 선택했는지 확인하고 "파일을 선택해 주세요." 등의 안내 메시지를 출력합니다.
- 값: 6 (
UPLOAD_ERR_NO_TMP_DIR)- 의미: 임시 폴더가 존재하지 않습니다.
- 다음 행동: 서버 환경에서 PHP 임시 디렉토리 설정(
upload_tmp_dir)과 디렉토리 존재 여부를 점검합니다.
- 값: 7 (
UPLOAD_ERR_CANT_WRITE)- 의미: 임시 폴더에 파일을 쓸 수 없습니다.
- 다음 행동: 서버의 디렉토리 퍼미션(권한)을 살펴보고 수정해야 합니다.
- 값: 8 (
UPLOAD_ERR_EXTENSION)- 의미: PHP 확장에 의해 파일 업로드가 중지되었습니다.
- 다음 행동: 어떤 PHP 확장이 업로드를 차단하는지 서버 설정을 점검합니다.
HTML 폼 파일 업로드 설정 방법
웹에서 파일을 업로드할 때 폼(Form)이 정상적으로 작동하고 PHP 서버로 파일 데이터가 전달되도록 하려면 다음과 같은 필수 속성들을 지정해야 합니다.
필수 속성 및 설정 위치
- enctype 속성:
<form>태그에enctype="multipart/form-data"를 반드시 지정해야 합니다. 이 설정이 누락되거나 다른 값이 들어가면 파일 업로드가 정상적으로 작동하지 않으며$_FILES배열이 비어 있게 됩니다. - method 속성: 파일 전송은 반드시
method="post"방식을 사용해야 합니다. GET 방식으로는 파일 첨부가 불가능합니다. - input 태그 설정: 파일을 선택하는 입력 필드는
<input type="file" name="필드명">형식으로 작성하며, 이때 반드시name속성을 지정해야 합니다. (id 속성이 아닌 name 속성으로 인식됩니다.)
예시 코드
<form action="업로드처리파일.php" method="post" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="submit" value="파일 전송">
</form>
업로드된 파일 이동 함수
서버의 임시 디렉토리에 저장된 업로드 파일을 최종 목적지로 안전하게 이동시키려면 move_uploaded_file() 함수를 사용합니다.
사용 방법 및 특징
move_uploaded_file(string $from, string $to)형식으로 사용하며, 첫 번째 인자에는 서버에 임시로 저장된 파일명($_FILES['userfile']['tmp_name'])을 지정하고, 두 번째 인자에는 이동할 최종 경로와 파일명을 지정합니다.- HTTP POST를 이용하여 업로드된 파일인지 안전하게 검증한 후 지정된 경로에 저장하며, 만약 해당 경로에 동일한 이름의 파일이 이미 존재하면 덮어쓰기를 수행합니다.
상황별 파일 업로드 처리 가이드
- 내 상황: 파일 업로드가 정상적으로 작동하지 않거나 $_FILES 배열이 비어 있는 경우
- 선택 기준: HTML 폼의 enctype="multipart/form-data" 설정 및 method="post" 여부 확인, php.ini의 uploadmaxfilesize 설정 점검
- 다음 행동: 폼 속성 누락 시 수정하고, 대용량 파일 업로드 시 설정값 조정 후 스크립트에서 $_FILES['error'] 코드 핸들링 적용
- 내 상황: 파일명 중복 충돌이나 권한 문제가 발생하는 경우
- 선택 기준: 타임스탬프와 난수를 조합한 고유 파일명 생성 및 업로드 디렉토리 권한(chmod) 설정 필요 여부
- 다음 행동: time()과 chr(rand(65,90))을 조합하여 중복 방지 파일명을 생성하고 moveuploadedfile() 함수로 안전하게 이동 후 권한 설정 수행
실전 FAQ
- Q. 파일 업로드 폼을 만들었는데 $_FILES 배열이 비어 있거나 전송되지 않습니다. 무엇을 먼저 확인해야 하나요?
- A. <form> 태그에 enctype="multipart/form-data" 속성과 method="post"가 올바르게 지정되었는지 확인해야 합니다. 또한 <input type="file"> 태그에 id가 아닌 name 속성이 정확히 부여되었는지 점검해야 합니다.
- Q. 업로드 실패 시 $FILES['error'] 코드가 1(UPLOADERRINISIZE)로 나타납니다. 어떻게 해결하나요?
- A. 업로드된 파일의 용량이 서버의 php.ini 파일에 설정된 uploadmaxfilesize 지시어 제한을 초과한 경우입니다. 서버 환경설정에서 해당 값을 늘리거나 업로드 파일의 크기를 줄여야 합니다.
함께 보면 좋은 글
- PHP 폼 데이터 전송 및 파일 업로드 처리 기초
- PHP 파일 업로드 보안 처리 가이드: isuploadedfile 및 moveuploadedfile 사용
- php.ini 설정과 웹 서버 옵션 조정을 통한 파일 업로드 용량 제한 변경 방법
참고자료
기타 참고자료
- doqtqu.tistory.com — PHP $_FILES 오류 메시지
- m.blog.naver.com — PHP 파일 업로드 - 에러메시지 설명. : 네이버 블로그
- unikys.tistory.com — PHP 파일 업로드 (AJAX, form 등으로 file 첨부), $_FILES 내용, 에러나는 이유와 처리 방법
- litzoo.tistory.com — PHP 파일 업로드 오류코드 종류와 의미
- hanwook-ai.tistory.com — JOYKIT :: php (파일 업로드)
- codingfactory.net — PHP / Tutorial / 파일 업로드 만드는 방법 – CODING FACTORY
- 이전글그누보드·영카트 아이코드 SMS 발신번호 사전등록 가이드 26.09.30
- 다음글그누보드 분류명 특수문자 입력 제한 원인과 보안 필터링 해제 방법 26.09.29
댓글목록
등록된 댓글이 없습니다.