4.3 파일 업로드

약 6분

본문 듣기
읽기 설정

글자 크기

줄 간격

글꼴

4.3 파일 업로드

웹 애플리케이션에서 파일 업로드 기능은 사용자가 서버에 파일을 전송할 수 있도록 하는 중요한 과정입니다. 이번 장에서는 파일 업로드의 원리와 방법을 배우고, 보안적인 측면을 고려하여 안전한 파일 업로드를 구현하는 방법에 대해 설명하겠습니다.

파일 업로드의 기본 흐름은 다음과 같습니다:

  1. 사용자가 HTML 폼을 통해 파일을 선택합니다.
  2. 선택된 파일이 POST 방식으로 서버에 전송됩니다.
  3. PHP가 파일을 수신하고 저장 처리 후, 결과를 사용자에게 반환합니다.

1. 파일 업로드 폼 생성

먼저, HTML 폼을 만들어 사용자가 파일을 업로드 할 수 있도록 합니다. 아래는 파일 업로드 폼의 예제입니다.

코드 html
<form action="upload.php" method="post" enctype="multipart/form-data">
    <label for="file">파일 선택:</label>
    <input type="file" name="file" id="file" required>
    <input type="submit" value="업로드">
</form>

2. 파일 업로드 처리

이제 upload.php 파일을 작성하여 선택된 파일을 서버에 저장하는 로직을 구현합니다. 여기서는 사용자로부터 전송된 파일이 정상적인지 확인하고, 지정된 디렉토리에 파일을 이동하는 방법에 대해 배우겠습니다.

코드 php
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 파일 정보
    $file = $_FILES['file'];
    
    // 오류 체크
    if ($file['error'] !== UPLOAD_ERR_OK) {
        die("파일 업로드 중 오류가 발생하였습니다.");
    }
    
    // 파일 타입 체크 (예: 이미지)
    if (!in_array($file['type'], ['image/jpeg', 'image/png', 'image/gif'])) {
        die("오류: 허용되지 않는 파일 타입입니다.");
    }
    
    // 파일이 저장될 경로
    $uploadDir = 'uploads/';
    $filePath = $uploadDir . basename($file['name']);
    
    // 파일 이동
    if (move_uploaded_file($file['tmp_name'], $filePath)) {
        echo "파일 업로드 성공: " . htmlspecialchars($filePath);
    } else {
        die("파일 업로드 실패.");
    }
}
?>

3. 파일 업로드 보안

파일 업로드는 다양한 보안 위험을 내포하고 있습니다. 다음은 몇 가지 보안 위험과 그 예방 방법입니다:

  • SQL Injection: 유저가 업로드한 파일 이름을 SQL 쿼리에 사용할 경우 인젝션에 취약할 수 있으니, mysqli_real_escape_string 같은 함수를 사용해 안전하게 처리해야 합니다.
  • 파일 확장자 검사: 파일의 MIME 타입만 아니라 확장자도 체크하여 허용된 파일 타입만 업로드하도록 제한합니다.
  • 저장 경로: 외부 접근이 불가능한 디렉토리에 파일을 저장해 직접 접근을 방지합니다.

4. 실습

이제 위에서 배운 사항들을 바탕으로 현재 프로젝트에 파일 업로드 기능을 추가해 보세요. 주의 깊게 코드를 작성하고, 보안 이슈를 항상 염두에 두세요.

5. 프로젝트

이제 파일 업로드 기능을 포함한 게시판을 만들어보세요. 사용자가 이미지를 올릴 수 있는 게시글 작성하기 기능을 구현함으로써 지난 시간에 배운 내용을 적용해볼 수 있습니다.

  • 게시글 작성시 파일 업로드 기능을 포함시키고, 업로드된 파일을 게시글과 연결되도록 구현하세요.
  • 게시판 목록에서 업로드된 이미지가 잘 보이도록 표시하세요.

정리

이번 장에서는 파일 업로드의 기본 개념, HTML 폼 구조, PHP 파일 업로드 처리 방법, 보안 위험 및 예방책에 대해 살펴보았습니다. 이제 여러분은 PHP를 통해 간단하지만 실용적인 기능을 구현할 수 있는 능력이 생겼습니다! 다음 장에서는 관리자 페이지 기능을 추가해 보겠습니다.

댓글 0

댓글을 남기려면 로그인하세요.

아직 댓글이 없습니다. 첫 댓글을 남겨보세요.