PHP - 파일 업로드

안녕하세요, PHP 개발자 지망생 여러분! 오늘 우리는 PHP를 사용한 파일 업로드의 흥미로운 세계에 빠져들어 보겠습니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 이 여정을 단계별로 안내해 드리겠습니다. 마음에 드는 음료를 한 잔 들고, 편안하게 앉아 파일 업로드의 모험을 함께 시작해 보세요!

PHP - File Uploading

파일 업로드 이해하기

코드로 뛰어들기 전에, 파일 업로드에 대해 잠시 이해해 보겠습니다. 친구에게 편지를 보내는 상상해 보세요. 편지를 쓰고, 봉투에 넣고, 우체국을 통해 보냅니다. 파일 업로드는 이와 매우 유사합니다! 편지 대신, 컴퓨터에서 웹 서버로 파일(이미지나 문서 등)을 보내는 것입니다.

파일 업로드 폼 생성하기

우리의 파일 업로드 여정의 첫 단계는 사용자가 파일을 선택하고 업로드할 수 있는 HTML 폼을 만드는 것입니다. 이 폼은 우리가 편지를 보내는 봉투로 생각할 수 있습니다.

간단한 HTML 폼을 만들어 보겠습니다:

<form action="upload.php" method="post" enctype="multipart/form-data">
업로드할 이미지 선택:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="이미지 업로드" name="submit">
</form>

이를 해부해 보겠습니다:

  1. action="upload.php": 이는 폼이 데이터를 어디로 보낼지 알려줍니다. 이 경우, 파일 업로드를 처리할 PHP 스크립트 upload.php를 만들겠습니다.
  2. method="post": 이는 우리가 POST 방법을 사용하여 데이터를 보낸다는 것을 지정합니다.
  3. enctype="multipart/form-data": 이는 매우 중요합니다! 폼이 텍스트 이상의 것을 보내고 있음을 알립니다 - 파일을 보내고 있습니다.
  4. <input type="file">: 이는 사용자가 컴퓨터에서 파일을 선택할 수 있는 버튼을 생성합니다.

업로드 스크립트 생성하기

이제 폼이 준비되었으므로, 파일 업로드를 처리할 PHP 스크립트를 만들어야 합니다. 이제 마법이 일어나는 순간입니다!

우리의 upload.php 파일을 만들어 보겠습니다:

<?php
if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// 파일이 이미 존재하는지 확인
if (file_exists($target_file)) {
echo "죄송합니다, 파일이 이미 존재합니다.";
$uploadOk = 0;
}

// 파일 크기 확인
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "죄송합니다, 파일이 너무 큽니다.";
$uploadOk = 0;
}

// 특정 파일 형식 허용
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "죄송합니다, JPG, JPEG, PNG 및 GIF 파일만 허용됩니다.";
$uploadOk = 0;
}

// 오류로 인해 $uploadOk이 0으로 설정된 경우 확인
if ($uploadOk == 0) {
echo "죄송합니다, 파일이 업로드되지 않았습니다.";
// 모든 것이 괜찮다면, 파일 업로드 시도
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "파일 " . basename( $_FILES["fileToUpload"]["name"]) . " 가 업로드되었습니다.";
} else {
echo "죄송합니다, 파일 업로드 중 오류가 발생했습니다.";
}
}
}
?>

와, 많은 코드네! 걱정하지 마세요, 단계별로 설명해 드리겠습니다:

  1. 먼저, 폼이 제출되었는지 확인합니다: isset($_POST["submit"]).
  2. 몇 가지 변수를 설정합니다:
  • $target_dir: 업로드된 파일을 저장할 디렉토리.
  • $target_file: 업로드된 파일의 전체 경로.
  • $uploadOk: 파일 업로드가 가능한지 확인하는 플래그.
  • $imageFileType: 업로드된 파일의 확장자.
  1. 몇 가지 확인을 수행합니다:
  • 파일이 이미 업로드된 디렉토리에 존재하는가?
  • 파일이 너무 큰가?
  • 파일 형식이 허용된 형식인가?
  1. 이러한 확인 중 하나라도 실패하면, $uploadOk을 0으로 설정합니다.

  2. 마지막으로, 모든 것이 괜찮다면 ($uploadOk == 1), move_uploaded_file() 함수를 사용하여 업로드된 파일을 임시 위치에서 업로드 디렉토리로 이동합니다.

일반 파일 업로드 방법

다음은 PHP 파일 업로드에서 일반적으로 사용되는 방법들의 표입니다:

방법 설명
$_FILES["file"]["name"] 클라이언트 기계에서의 파일의 원본 이름
$_FILES["file"]["type"] 파일의 MIME 형식
$_FILES["file"]["size"] 파일의 크기(바이트)
$_FILES["file"]["tmp_name"] 서버에 저장된 파일의 임시 파일명
$_FILES["file"]["error"] 이 파일 업로드와 관련된 오류 코드
move_uploaded_file() 업로드된 파일을 새로운 위치로 이동

결론

이제 여러분이 파일 업로드 폼을 만들고, 업로드 과정을 처리하는 PHP 스크립트를 작성하고, 오류 확인 및 파일 형식 제한을 포함한 완전한 과정을 완료했습니다.

파일 업로드는 올바르게 처리되지 않으면 보안 위험이 될 수 있습니다. 항상 사용자 입력을 검증하고 정리하며, 파일 형식과 크기를 제한하고, 업로드된 파일을 브라우저를 통해 직접 접근할 수 없는 디렉토리에 저장하십시오.

이 강의를 마치면서, 한 학생이 프로필 사진을 위한 웹사이트에 1GB의 비디오 파일을 업로드한 일을 떠올립니다. 서버는 별로 행복하지 않았습니다! 그래서 항상 파일 크기 제한을 설정하십시오!

계속 연습하고, 코딩하고, PHP를 즐기세요! 다음 시간까지, 즐겁게 업로드하세요!

Credits: Image by storyset