[PHP] 파일 업로드 하기
카테고리: PHP
소스 코드
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를 사용하는데 아래의 글을 참조하여 바꿔 사용하면 된다.