IMCAT.DEV
로그인 가입
PHP 중급 도구

PHP 파일 업로드 처리

PHP 파일 업로드 처리 — 중급

PHP 파일 업로드 처리

1. 도입 (왜 배워야 하는가)

파일 업로드는 웹 애플리케이션에서 매우 중요한 기능입니다. 사용자들이 이미지, 문서, 비디오 등을 서버에 업로드할 수 있도록 해주며, 이 기능은 쇼핑몰, 소셜 미디어, 클라우드 서비스 등 다양한 웹 서비스에서 필수적입니다.

이 기능을 모르면 사용자가 파일을 서버에 전송할 수 없으므로, 사용자 경험이 저하되고 애플리케이션의 기능이 제한됩니다. 예를 들어, 사용자가 프로필 사진을 업로드할 수 없다면 서비스의 매력도가 떨어질 수 있습니다. 따라서 PHP에서 파일 업로드를 처리하는 방법을 이해하고 구현하는 것은 매우 중요합니다.

2. 핵심 개념 설명

  • POST 요청: 웹에서 파일을 업로드할 때 주로 사용되는 방법입니다. 사용자가 정보를 제출할 때, 이 정보를 서버로 전송하기 위해 POST 방식이 사용됩니다.
  • $_FILES 배열: PHP에서 파일 업로드 시, 업로드된 파일에 대한 정보를 담고 있는 슈퍼글로벌 배열입니다. 이 배열에는 파일의 이름, 타입, 임시 경로, 오류 코드 등이 포함되어 있습니다.
  • 파일 타입 검사: 업로드된 파일이 예상한 형식인지 확인하는 과정입니다. 예를 들어, 이미지 파일만 허용하고 싶은 경우, MIME 타입을 검사하여 안전성을 확보합니다.
  • 용어설명
    POST 요청사용자가 데이터를 서버에 전송하는 방식
    $_FILES 배열업로드된 파일 정보를 담고 있는 배열
    MIME 타입파일 형식을 나타내는 식별자

    3. 기본 코드 예제

    아래는 파일 업로드를 처리하는 가장 기본적인 PHP 코드 예제입니다.

    <?php
    if ($_SERVER['REQUEST_METHOD']  'POST') {
        if (isset($_FILES['uploaded_file'])) {
            $file = $_FILES['uploaded_file'];
            
            // 파일이 정상적으로 업로드되었는지 확인
            if ($file['error'] = UPLOAD_ERR_OK) {
                $upload_dir = 'uploads/';
                $upload_file = $upload_dir . basename($file['name']);
                
                // 파일을 지정한 디렉토리로 이동
                if (move_uploaded_file($file['tmp_name'], $upload_file)) {
                    echo "파일이 성공적으로 업로드되었습니다.";
                } else {
                    echo "파일 업로드에 실패했습니다.";
                }
            } else {
                echo "파일 업로드 중 오류가 발생했습니다.";
            }
        }
    }
    ?>
    <form method="POST" enctype="multipart/form-data">
        <input type="file" name="uploaded_file" />
        <input type="submit" value="업로드" />
    </form>
  • 실행 결과: 정상적으로 업로드되면 "파일이 성공적으로 업로드되었습니다." 출력.
  • 코드 설명:
  • - if ($_SERVER['REQUEST_METHOD'] == 'POST'): 요청 방식이 POST인지 확인합니다. - if (isset($_FILES['uploaded_file'])): 업로드된 파일이 존재하는지 확인합니다. - $file = $_FILES['uploaded_file'];: 업로드된 파일 정보를 $_FILES 배열에서 가져옵니다. - if ($file['error'] === UPLOAD_ERR_OK): 파일 업로드에 오류가 없음을 확인합니다. - move_uploaded_file(...): 임시 위치에서 최종 위치로 파일을 이동합니다.

    4. 실전 활용 예제

    1. 쇼핑몰에서 상품 이미지 업로드
    2. - 사용자가 상품을 등록할 때, 상품 이미지를 업로드할 수 있습니다. 이 경우 파일 타입을 검사하여 이미지 파일만 허용하도록 합니다.

         $allowed_types = ['image/jpeg', 'image/png'];
         if (!in_array($file['type'], $allowed_types)) {
             echo "허용되지 않는 파일 형식입니다.";
         }
    3. 프로필 사진 변경
    4. - 사용자가 자신의 프로필 사진을 업로드할 수 있도록 구현합니다. 업로드된 파일의 크기를 제한하여 서버 용량을 관리할 수 있습니다.

         if ($file['size'] > 2000000) { // 2MB
             echo "파일 크기가 너무 큽니다.";
         }

      5. 흔한 실수와 주의사항

    5. 파일 크기 제한을 설정하지 않음
    6. - 잘못된 코드: 파일 크기를 제한하지 않으면 대용량 파일로 인해 서버가 다운될 수 있습니다. - 올바른 코드: php.ini에서 upload_max_filesize를 설정하거나 코드에서 파일 크기를 체크합니다.

    7. 파일 타입 검사를 하지 않음
    8. - 잘못된 코드: 사용자가 악성 파일을 업로드할 수 있습니다. - 올바른 코드: MIME 타입을 검사하여 안전한 파일만 허용합니다.

    9. 업로드 경로를 하드코딩
    10. - 잘못된 코드: 절대 경로를 사용하면 이식성이 떨어집니다. - 올바른 코드: __DIR__ 상수를 사용하여 현재 디렉토리에 상대적으로 경로를 설정합니다.

      6. 정리

    11. 파일 업로드는 웹 애플리케이션의 필수 기능입니다.
    12. POST 요청과 $_FILES 배열을 이용하여 파일을 처리합니다.
    13. 파일 타입과 크기 검사는 보안상 매우 중요합니다.
    14. 다음에 학습하면 좋은 주제: 파일 업로드 시 보안 강화 방법 (예: 파일 이름 변환, 폴더 권한 설정 등).