Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP $_FILES 완벽 가이드: 파일 업로드 정보 다루기

PHP $_FILES란 무엇인가?

PHP의 전역 사전 정의 변수인 $_FILES는 HTTP POST 방식을 통해 업로드된 파일 정보를 연관 배열 형태로 담고 있는 슈퍼글로벌 변수입니다. 웹에서 파일을 업로드하려면 반드시 enctype 속성이 multipart/form-data로 설정된 POST 방식의 HTML 폼을 사용해야 합니다.

참고로 과거에는 $HTTP_POST_FILES라는 변수에 동일한 정보가 담겼지만, 이 변수는 슈퍼글로벌이 아니며 현재는 공식적으로 지원이 중단(deprecated)되었으므로 사용하지 않는 것이 좋습니다.

$_FILES 배열의 주요 속성

$_FILES 배열은 업로드된 각 파일에 대해 다음과 같은 정보를 제공합니다.

  • $_FILES['file']['name'] — 클라이언트 컴퓨터에 있던 파일의 원래 이름입니다.
  • $_FILES['file']['type'] — 파일의 MIME 타입입니다. (예: text/html, image/png)
  • $_FILES['file']['size'] — 업로드된 파일의 크기(바이트 단위)입니다.
  • $_FILES['file']['tmp_name'] — 서버에 임시 저장된 파일의 경로와 임시 파일명입니다.
  • $_FILES['file']['error'] — 해당 파일 업로드와 관련된 에러 코드입니다. 0은 업로드 성공을 의미합니다.

파일 업로드 폼 만들기

다음 test.html은 enctype이 multipart/form-data로 설정된 HTML 폼을 포함하고 있으며, 사용자가 업로드할 파일을 선택할 수 있는 file 입력 요소를 화면에 표시합니다.

<form action="testscript.php" method="POST" enctype="multipart/form-data">
   <input type="file" name="file">
   <input type ="submit" value="submit">
</form>

예제: 업로드 정보 출력하기

폼이 전송되면 아래와 같은 PHP 스크립트(testscript.php)에서 $_FILES 배열의 각 요소에 접근하여 업로드된 파일의 정보를 확인할 수 있습니다.

<?php
echo "Filename: " . $_FILES['file']['name']."<br>";
echo "Type : " . $_FILES['file']['type'] ."<br>";
echo "Size : " . $_FILES['file']['size'] ."<br>";
echo "Temp name: " . $_FILES['file']['tmp_name'] ."<br>";
echo "Error : " . $_FILES['file']['error'] . "<br>";
?>

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Filename: hello.html
Type : text/html
Size : 56
Temp name: C:\xampp\tmp\php32CE.tmp
Error : 0

참고: 주요 에러 코드

  • UPLOAD_ERR_OK (0): 업로드가 정상적으로 완료되었습니다.
  • UPLOAD_ERR_INI_SIZE (1): php.ini의 upload_max_filesize 설정값을 초과했습니다.
  • UPLOAD_ERR_FORM_SIZE (2): HTML 폼에 지정된 MAX_FILE_SIZE를 초과했습니다.
  • UPLOAD_ERR_PARTIAL (3): 파일의 일부만 업로드되었습니다.
  • UPLOAD_ERR_NO_FILE (4): 업로드된 파일이 없습니다.

업로드가 성공했다면, 임시 디렉터리에 저장된 파일은 요청 종료 후 자동으로 삭제되므로 move_uploaded_file() 함수를 사용해 원하는 위치로 옮겨 영구적으로 저장해야 합니다.