결과물
- 우선 write.php에서 업로드 기능만 구현해 두었다.
- 파일 위치를 잘 설정해줬어야 했다. 파일 위치를 제대로 설정하지 않아 업로드가 되지 않는 불상사가 생겼었다.
- file에 한정해서 chmod 777을 했었다. 이렇게 하면 문제가 생길 수도 있다고 하기에 나중에 접근 권한을 다르게 바꿔야할 것 같다.
코드
//write.php 일부분
<form method="post" action="write_action.php" class = "writeForm" enctype="multipart/form-data">
<div>
<input type="text" name = "title" style="width:600px" id = "title" class = "titleFrom" value = <?php echo $title; ?> >
</div>
<div>
<input type="text" name = "detail" style="width:600px;height:400px" id = "detail" class = "detailForm" value = <?php echo $detail; ?> >
</div>
<div>
<input type="hidden" name="bid" id = "bid" value = <?php echo $bid; ?> >
</div>
<div>
<label for="upfile">첨부파일</label>
<input type="file" name="upfile" id="upfile">
</div>
<button type="submit">작성</button>
<button type="button" name = "cancel" id = "name" onclick="location.href='read_index.php'">취소</button>
</form>
</body>
</html>
- form에 enctype = "multipart/form-data"를 넣었다. 파일을 전송하기 위해 인코딩이 필요하게 되는데 이때 파일은 위와 같이 인코딩을 해야한다.
- label과 input:file을 넣었다. upfild을 누르는 경우 파일을 넣을 수 있는 창이 나오게 된다.
//write_action.php 일부분
else{# write
$tmpfile = $_FILES['upfile']['tmp_name'];
$filename = $_FILES['upfile']['name'];
$folder = "./file/upload/".$filename;
move_uploaded_file($tmpfile, $folder);
$q = "INSERT INTO board(id, title, detail, file, created) VALUES ('$id', '$title', '$detail', '$filename', default)";
}
- 우선 mysql의 board 테이블에 file 이름을 저장하는 컬럼인 file을 추가했다.
- $folder의 경우 file이 저장되는 위치를 말하는데, write_action.php는 /var/www/html에 위치한다. 그리고 upload의 경우 /var/www/html/file/upload에 위치하는데, write_action.php의 상대 경로를 $folder에 넣어야 한다.
- move_uploaded_file은 tmp에 임시 저장되어 있는 파일을 $folder로 옮기는 것을 말한다.
- 우선은 글을 작성할 때에만 첨부파일을 추가하도록 만들었다. 만약 수정하는 경우에도 이 코드를 넣으면 첨부파일이 중복으로 저장되는 경우가 발생할 수도 있을 것 같아 일단은 작성시에만 첨부할 수 있도록 했다.
앞으로 할 일
- 업로드를 넣었으니 이제 다운로드를 할 수 있게 만들어야 할 것이다. read.php 파일에 추가할 예정이다.