약 6분
읽기 설정
글자 크기
줄 간격
글꼴
7.5 파일 업로드 기능 구현
웹 애플리케이션에서 파일 업로드 기능은 사용자에게 유용한 기능 중 하나로, 프로필 사진, 문서, 이미지 등을 서버에 저장할 수 있게 해줍니다. 이 과정에서는 PHP를 사용하여 파일 업로드 기능을 구현하고, 보안 고려사항을 함께 다루겠습니다.
1. 웹의 동작 원리
웹 애플리케이션은 클라이언트(브라우저)와 서버 간의 데이터 통신을 통해 동작합니다. 기본적인 흐름은 다음과 같습니다:
- 클라이언트 (브라우저): 사용자가 요청을 보냅니다.
- 웹서버: 요청을 받고 해당 PHP 스크립트를 실행합니다.
- PHP: 비즈니스 로직을 처리하고 필요한 경우 데이터베이스와 상호작용합니다.
- 데이터베이스: 데이터 저장 및 검색을 처리합니다.
- 응답 (브라우저): 결과를 클라이언트에 반환합니다.
2. 파일 업로드 기본 구조
파일 업로드를 위해 HTML 폼을 사용하여 파일을 선택하고, PHP 스크립트를 통해 파일을 처리합니다. 아래는 파일 업로드를 위한 HTML 예제입니다. 이 코드에서 <input type="file">을 사용하여 사용자가 업로드할 파일을 선택할 수 있습니다.
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">파일 선택:</label>
<input type="file" name="uploadedFile" id="file" required>
<input type="submit" value="업로드">
</form>
3. PHP 파일 처리
PHP에서 파일 업로드를 처리하기 위해 $_FILES 변수를 사용합니다. 다음은 파일 업로드를 처리하는 upload.php의 예제입니다.
- 파일의 유효성 검사
- 파일 이동
그 다음, 파일 업로드가 완료된 후 move_uploaded_file 함수를 이용해 서버의 특정 디렉토리로 파일을 이동합니다.
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 업로드된 파일 정보
$file = $_FILES['uploadedFile'];
// 에러 확인
if ($file['error'] !== 0) {
die("파일 업로드 오류!");
}
// 파일 타입과 크기 검사
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($file['type'], $allowedTypes) || $file['size'] > 2000000) {
die("잘못된 파일 형식 또는 파일 크기가 너무 큽니다!");
}
// 파일 저장 경로
$uploadDir = 'uploads/';
$filePath = $uploadDir . basename($file['name']);
// 파일 이동
if (move_uploaded_file($file['tmp_name'], $filePath)) {
echo "파일 업로드 성공: " . htmlspecialchars($filePath);
} else {
echo "파일 업로드 실패!";
}
}
?>
4. 보안 고려사항
파일 업로드는 보안 취약점이 될 수 있습니다. 이러한 취약점을 방지하기 위해 다음 사항을 염두에 두어야 합니다:
- 파일 형식 검사
- PHP 코드 주입 방지
- 파일 이름 랜덤화
이를 통해 악성 스크립트가 서버에 업로드되는 것을 막을 수 있으며, 보안성을 높일 수 있습니다.
5. 실습
이제 여러분은 위의 코드를 바탕으로 파일 업로드 기능을 구현해보세요. 업로드 후 파일리스트를 보여주는 기능도 추가해보세요.
6. 정리
이번 장에서는 파일 업로드 기능을 구현하기 위한 HTML과 PHP 코드를 작성하였고, 보안 고려사항에 대해서도 다루었습니다. 이 실습을 통해 여러분은 웹 애플리케이션에서 사용자로부터 파일을 안전하게 받아들이는 방법을 익히게 되었습니다.
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.