본문 바로가기
PHP/게시판 만들기

파일 첨부하기

by ethanjoh 2008. 11. 30.

파일 업로드를 구현하는데 많은 시간이 걸렸다. 아니 정확히 말하면 업로드된 파일을 수정하는데 시간을 많이 잡아먹었다.

첨부파일을 하나 올리는 것은 그리 어렵지 않게 했으나, 욕심이 생겨 처음부터 3개 정도의 파일을 올리는 것이 좋겠다 싶어 3개의 파일을 첨부할 수 있도록 했다. 뭐 이것도 그럭저럭 됐다.

그런데 문제는 올려진 파일을 수정하는데서부터 어려움을 겪기 시작했다.
파일이 3개다 보니 수정 시에 체크할 것도 많아지고, 제대로 동작이 안되는 일이 빈번했다.

체크된 파일만 삭제해야 하거나 기존 첨부파일은 그대로 두고 새롭게 파일을 올리거나, 기존 첨부파일을 덮어쓰거나...여러 가지 경우의 수가 발생했는데 이것을 다 핸들링하는 것이 좀 버거웠다.

그래서, 결국 하나의 파일만 우선 첨부하거나 첨부파일이 있는 글을 수정하는 것만 하기로 했다.
우선은 phpmyadmin을 이용해서 테이블에 filename이라는 컬럼을 하나 더 추가한다.
타입은 varchar(255), 기본값은 null이다.

글을 작성하는 post.php 부분.

여긴 주로 HTML 폼이 들어가기 때문에 사실 크게 처리할 부분이 없다.
기존 텍스트만 올리던 것에서 파일을 전송할 수 있도록 form을 변경하는 것이 중요하다.
이 ENCTYPE이 없으면 파일이 업로드되지 않는다.



그 다음은 실제 처리부분인 post_ok.php다.
앞서 파일을 첨부하는데 쓰였던 uploadedfile 변수는 $_FILES로 받는다.

 

그런데 이것이 Array 값이다.
print_r($_FILES['uploadfile']을 찍어보면 여러 값이 나온다.

Array {
[name] => 1.jpg
[type] => image/jepg
[temp_name] => /tmp/php33cfhq
[error] => 0
[size] => 11643
}

위와 같이 파일명부터 사이즈까지 자동으로 배열로 저장이 된다.
[temp_name]은 서버에 올라갔을 때의 임시파일명이고, [error]코드가 0이면 업로드가 성공한 것이고 4면 업로드한 파일이 없는 것이다.

자세한 내용은 http://kr2.php.net/features.file-upload를 참고하면 된다.

어쨌거나 post_ok.php에서 대부분은 에러체크 부분이고 실제 파일이 업로드되어 서버의 지정한 디렉토리에 저장되도록 하는 것은 아래 코드이다.



임시파일을 지정한 디렉토리에 저장하는 함수다.
이렇게 하면 서버에 저장이 되나 다른 문제가 있었다.
바로 파일명이 중복되는 일이었다.

그래서 http://www.phpschool.com의 답변 댓글 중에 도움을 받아 파일명 앞에 임의로 문자들을 추가하는 방법을 삽입했다.

 

이 파일명이 중복되는 것을 막기 위한 방법은 여러 가지가 있을 수 있지만 제일 간편한 것 같아 그냥 이렇게 하기로 했다.

이것으로 일단 파일 첨부하기는 끝.



'PHP > 게시판 만들기' 카테고리의 다른 글

첨부파일 수정하기  (0) 2008.12.07
여러 개 파일 첨부하기  (0) 2008.11.30
검색 기능 추가  (0) 2008.11.22
답글 수정 및 삭제하기  (0) 2008.11.21
답변 쓰기 기능 작성 (중간 소스정리)  (3) 2008.11.20