로그인 회원가입
모두인포
전체IT경제사회생활스포츠시사여행연애

PHP 파일 업로드

lmkfox · 2025-08-05 · 조회 0
PHP 파일 업로드
1. HTML 폼 준비 파일 업로드를 위해서는 다음과 같은 필수 조건이 있습니다: - form 태그에 enctype="multipart/form-data" 지정 - method="post" 사용 - input type="file" 포함 <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="submit" value="업로드"> </form> 2. PHP 업로드 처리 (upload.php) 업로드된 파일은 PHP에서 $_FILES 배열을 통해 접근할 수 있습니다. if (isset($_FILES['myfile'])) { $file = $_FILES['myfile']; if ($file['error'] === UPLOAD_ERR_OK) { $tmpName = $file['tmp_name']; // 임시 저장 위치 $name = basename($file['name']); // 원본 파일 이름 $uploadDir = "uploads/"; $uploadFile = $uploadDir . $name; if (move_uploaded_file($tmpName, $uploadFile)) { echo "파일 업로드 성공: $uploadFile"; } else { echo "파일 업로드 실패"; } } else { echo "에러 코드: " . $file['error']; } } 3. $_FILES 배열 구조 $_FILES['myfile'] = [ 'name' => '파일명.jpg', 'type' => 'image/jpeg', 'tmp_name' => '/tmp/phpYzdqkD', 'error' => 0, 'size' => 123456 ]; 키 설명 name 사용자가 업로드한 파일의 원래 이름 type MIME 타입 tmp_name 서버에 저장된 임시 파일 경로 error 업로드 상태 코드 size 바이트 단위 파일 크기 4. 업로드 오류 코드 ($_FILES['myfile']['error']) 코드 설명 0 정상 업로드 1 php.ini의 upload_max_filesize 초과 2 HTML 폼에서 설정된 MAX_FILE_SIZE 초과 3 파일이 일부만 업로드됨 4 파일이 업로드되지 않음 6 임시 폴더 없음 7 디스크에 쓰기 실패 8 확장에 의해 업로드 중단 5. 업로드 파일 제한 설정 (php.ini) file_uploads = On upload_max_filesize = 5M post_max_size = 8M max_file_uploads = 10 - 업로드 최대 용량은 post_max_size보다 upload_max_filesize가 작아야 합니다. 6. 파일 유효성 검사 예 $allowedTypes = ['image/jpeg', 'image/png', 'application/pdf']; $maxSize = 2 * 1024 * 1024; // 2MB if (!in_array($file['type'], $allowedTypes)) { echo "허용되지 않은 파일 형식"; } elseif ($file['size'] > $maxSize) { echo "파일 크기가 너무 큽니다"; } else { move_uploaded_file($file['tmp_name'], "uploads/" . basename($file['name'])); } 7. 보안 고려 사항 - 파일 이름 검증: basename()이나 고유한 이름 사용 (uniqid() 등) - 확장자 검사: MIME 타입과 파일 확장자 모두 확인 - 디렉토리 경로 고정: 사용자가 경로를 조작할 수 없도록 하드코딩 - 임시 파일은 반드시 move_uploaded_file() 사용: 임의 이동 방지 - 실행 가능한 파일 제한: .php, .exe, .sh 등의 업로드 방지 8. 업로드 파일명 변경 예 $ext = pathinfo($file['name'], PATHINFO_EXTENSION); $newName = uniqid('upload_', true) . '.' . $ext; move_uploaded_file($file['tmp_name'], "uploads/" . $newName); 9. 여러 파일 업로드 HTML: <input type="file" name="myfiles[]" multiple> PHP: foreach ($_FILES['myfiles']['name'] as $i => $name) { $tmp = $_FILES['myfiles']['tmp_name'][$i]; move_uploaded_file($tmp, "uploads/" . basename($name)); } 10. 디렉토리 존재 확인 및 생성 $dir = "uploads/"; if (!is_dir($dir)) { mkdir($dir, 0755, true); } 요약 작업 관련 함수/항목 HTML 폼 구성 <form enctype="multipart/form-data"> 파일 정보 확인 $_FILES 배열 파일 이동 move_uploaded_file() 파일 검증 type, size, extension 검사 에러 처리 $_FILES['error'] 코드 확인 보안 조치 확장자 제한, 고유 파일명 사용 등

댓글

아직 댓글이 없습니다.

로그인 후 댓글을 남길 수 있습니다.