개발 순서
게시글 작성 폼에 파일 업로드 항목 추가 > 저장 파일에서 파일 DB와 디렉토리에 저장하는 기능 수행하는 코드 추가
1. 게시글 작성 폼에 파일 업로드 항목 추가
이전에 만들어 둔 member_form.php에 파일 업로드 항목을 다음과 같이 추가했다.
<form name="board" method="post" action="member_insert.php"
enctype="multipart/form-data">
<ul class="board_form">
<li>
<span class="col1">ID</span>
<span class="col2"><?=$username?></span>
</li>
<li>
<span class="col1">제목</span>
<span class="col2"><input name="title" type="text"></span>
</li>
<li class="area">
<span class="col1">내용</span>
<span class="col2">
<textarea name="content"></textarea>
</span>
</li>
// 추가된 코드는
<li>
<span class="col1"> 첨부 파일</span>
<span class="col2"><input type="file" name="upfile"></span> // 타입은 파일로!
</li>
// 여기까지 </ul>
<ul class="buttons">
<li><button type="button" onclick="check_input()">저장하기</button></li>
<li><button type="button" onclick="location.href='member_list.php'">목록보기</button></li>
</ul>
</form>
|
cs |
2. 저장 파일에서 파일 DB와 디렉토리에 저장하는 기능 수행하는 코드 추가
게시글 저장 페이지인 member_insert.php에 다음과 같이 파일 업로드 코드를 추가했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
<?php
session_start();
$username = $_SESSION["username"];
$title = $_POST["title"];
$content = $_POST["content"];
$title = htmlspecialchars($title, ENT_QUOTES); // 제목 HTML 특수문자 변환
$content = htmlspecialchars($content, ENT_QUOTES); // 내용 HTML 특수문자 변환
$wr_date = date("Y-m-d (H:i)");
// 추가된 코드
$upload_dir = './file/'; // 첨부파일 저장할 디렉토리
$upfile_name = $_FILES["upfile"]["name"];
$upfile_tmp_name = $_FILES["upfile"]["tmp_name"];
$upfile_type = $_FILES["upfile"]["type"];
$upfile_size = $_FILES["upfile"]["size"];
$upfile_error = $_FILES["upfile"]["error"];
if ($upfile_name && !$upfile_error)
{
$file = explode(".", $upfile_name);
$file_name = $file[0];
$file_ext = $file[1];
$copied_file_name = date("Y_m_d_H_i_s");
$copied_file_name .= ".".$file_ext;
$uploaded_file = $upload_dir.$copied_file_name;
// 파일 크기 확인
if( $upfile_size > 10000000 ) {
echo("
<script>
alert('업로드 파일 크기가 지정된 용량(10MB)을 초과합니다!<br>파일 크기를 체크해주세요! ');
history.go(-1);
</script>
");
exit;
}
// 디렉토리에 복사 실패
if (!move_uploaded_file($upfile_tmp_name, $uploaded_file) )
{
echo("
<script>
alert('파일을 지정한 디렉토리에 복사하는데 실패했습니다.');
history.go(-1)
</script>
");
exit;
}
}
else
{
$upfile_name = "";
$upfile_type = "";
$copied_file_name = "";
}
$conn = mysqli_connect("localhost", "", "", "");
$sql = "insert into memberboard (username, title, content, wr_date, ";
$sql .= "file_name, file_type, file_copied) ";
$sql .= "values('$username', '$title', '$content', '$wr_date', ";
$sql .= "'$upfile_name', '$upfile_type', '$copied_file_name')";
mysqli_query($conn, $sql);
mysqli_close($conn);
echo "<script>
location.href = 'member_list.php';
</script>";
?>
|
cs |
|
추가된 코드는 18번줄부터 67번줄까지다.
18 : 첨부파일을 저장할 디렉토리 지정. 현재 디렉토리에 file이라는 디렉토리를 새로 만들었고, 거기에 첨부파일을 저장한다. 이 때 디렉토리에 쓰기 및 실행권한까지 부여하자.
20 ~ 24 : $_FILES 배열을 사용하여 업로드한 파일의 정보를 가져온다. $_FILES["upfile"]에서 upfile은 파일 업로드 시 사용한 input 태그의 name 속성이다. 따라서 이 코드는 업로드한 파일의 이름, 임시 파일 경로, 파일 형식(MIME 타입), 파일 크기, 오류 코드 등을 변수에 저장한다.
26 ~ 34 : 파일 업로드가 이루어지면 실행되는 코드. explode() 함수로 파일 이름을 "."을 기준으로 나눠 파일 이름과 확장자명을 각각 $file_name과 $file_ext에 저장한다. $copied_file_name 변수는 date("Y_m_d_H_i_s")를 이용하여 현재 날짜와 시간 정보를 문자열로 생성한 뒤 파일 확장자를 추가하여 최종적인 복사될 파일의 이름을 만든다. $uploaded_file 변수에는 복사될 파일의 경로와 이름을 저장한다.
39 ~ 47 : 파일 용량 10MB 제한 검사
51 ~ 60 : 디렉토리에 복사 실패
62 ~ 67 : 파일 저장이 성공한 경우. else문에 의해 파일 이름 등의 변수 초기화.
참고 도서 : PHP+MySQL 입문
'Hacking_study > 개발과제' 카테고리의 다른 글
8주차_(3) 조회수 (0) | 2023.06.05 |
---|---|
8주차_(2) 파일 다운로드 (0) | 2023.06.04 |
7주차 게시판 페이징 (0) | 2023.06.01 |
6주차_(3) 회원 게시판 글 검색 (0) | 2023.05.31 |
6주차_(2) 회원 게시판 글 수정 (0) | 2023.05.28 |