-
[PHP] 파일 업로드 하기프로그래밍/Web(CSS + HTML + JS + PHP ) 2023. 9. 15. 14:46728x90
소스 코드
php로 여러가지를 개발하다 보면, 사용자가 파일을 업로드 해야 할 상황이 있다.
아래는 php8 에서 사진 파일을 업로드하는 예제이다.
- index.html
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>사진 업로드</title> </head> <body> <form action="upload.php" method="POST" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> </body> </html>
- upload.php
// 업로드 디렉토리를 설정합니다. $uploadDir = "uploads/"; // 업로드 디렉토리 경로 $maxFileSize = 5 * 1024 * 1024; // 5MB // 업로드된 파일의 정보를 가져옵니다. $fileName = $_FILES["fileToUpload"]["name"]; $fileTmpName = $_FILES["fileToUpload"]["tmp_name"]; $fileSize = $_FILES["fileToUpload"]["size"]; // 파일 확장자를 체크하고 허용되는 확장자를 지정합니다. $allowedExtensions = ["jpg", "jpeg", "png", "gif"]; $fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION)); if (in_array($fileExtension, $allowedExtensions)) { // 파일 크기를 체크하고 원하는 크기로 제한합니다. if ($fileSize <= $maxFileSize) { // 새로운 파일 이름을 생성합니다. $newFileName = uniqid() . "." . $fileExtension; $uploadPath = $uploadDir . $newFileName; // 임시 파일의 경로를 UTF-8로 변환합니다. $utf8TmpFileName = mb_convert_encoding($fileTmpName, 'UTF-8', 'auto'); // 파일을 이동시킵니다. if (move_uploaded_file($utf8TmpFileName, $uploadPath)) { echo "파일 업로드 성공: " . $newFileName; } else { echo "파일 업로드 실패."; } } else { echo "파일 크기가 너무 큽니다. 최대 파일 크기는 " . ($maxFileSize / (1024 * 1024)) . "MB입니다."; } } else { echo "지원하지 않는 파일 형식입니다. jpg, jpeg, png, gif 파일만 허용됩니다."; }
임시 파일의 경로를 UTF-8로 변환하는 과정을 거치지 않으면 사용자가 한글이 포함된 파일을 업로드할 때 오류가 발생한다. 따라서 iconv나 mb_convert_encoding를 사용하는데 아래의 글을 참조하여 바꿔 사용하면 된다.
728x90댓글