티스토리 뷰
# 지난번까지의 write_ok.php
# 지난번까지의 write.php
write.php에서 텍스트 및 파일을 첨부하고 업로드 하면 write_ok.php 로 파일이 넘어가는 방식이다.
POST방식으로 데이터를 전송하게 된다. 파일을 첨부할땐 enctype="multipart/form-data" 를 사용해서
다양한 데이터 타입에 대한 처리가 가능하도록 설정해줘야한다.
이번엔 이어서 write_ok.php 에서 전달받은 데이터를 DB에 입력하는부분을 구현해보도록 하자.
사실 상당부분 이전내용과 유사하기때문에 완성코드를 바탕으로 설명을 적어보겠다.
# write_ok.php
#
세션값을 체크해서 비정상적인 접근을 차단한다.
#
file은 임시경로에 저장이 되게된다. 파일 업로드시 최초로 아파치 내의 임시경로에 저장이된다.
(이전 게시물 참고 : http://kevinthegrey.tistory.com/31)
[tmp_name] => /tmp/phpEf8LWg 와 같은 경로에 저장이 되는데,
이렇게 임시경로에 저장된 파일을 찾아서 최종 폴더에 집어넣기위해 변수 두개를 만들어줬다.
$src 는 임시경로에 저장된 파일, $tmp는 해당 파일의 파일명이다.
아래 세션체크는 항상 해오던 최초 DB에 테이블설정시 입력선 옵션을 그대로 반영하여,
비정상적인 값이 입력되는것을 차단하기 위함이다.
그 아래에는 제목 내용 등 나중에 INSERT쿼리를 보낼때 수월하도록 각각 변수 하나에 담아뒀다.
#
$_FILES[file][error] 는 0일경우 에러가 나지 않음을 의미한다.
따라서 파일이 정상적으로 추가가 된 경우, 기존에 동일한 파일이 있는지 체크하기위해
그 아래와 같은 방법을 사용하였다.
$exist = fopen(경로, 읽기전용); 은 해당 경로의 파일을 읽기전용으로 불러들였을때
값이 있으면 특정 값을 나타내고 없을경우 false를 반환한다.
따라서 $exist 변수에 값이 할당되었다는것은, 해당 경로에 파일이 존재한다는것이고
이는 이미 해당 이름을 가진 파일이 DB에 존재함을 의미한다.
그러므로 지속적으로 갱신되는 시간의 속성을 이용해 이를 해결할 수 있다.
시간정보를 디렉토리명으로 설정하여 data경로 하위에 새로 생성해준다.(mkdir 새로운경로)
그리고 해당 파일을 그 디렉토리에 저장하는 개념이다.
만약 중복된 파일명이 기존에 존재하지 않는경우 그냥 저장한다.
아래의 else문에는 파일을 업로드하지 않은경우 널값을 할당하여
업로드시에 문제가 따로 발생하지 않도록 처리하였다.
#
하단은 실제로 DB에 INSERT 쿼리를 보내는 코드이다.
# 확인해보면 입력한 데이터가 잘 들어가있다.
우리가 쿼리쪽 파트 입력할때 쿼리가 제대로 입력되었는지 또는 어디쪽에서 오류가 나서 처리가 어려운건지
확인이 어려울 때가 있다. 이럴때 오류를 확인하는 방법중 한가지를 알아보도록하자.
mysqld_safe --log=[파일명].log &
mysqld_safe --log=query.log &
# mysqld_safe 결과 실제 쿼리가 어떻게 처리되는지 확인할 수 있다.
실시간으로 파일형태로 로그를 남기는것이다.
--log 옵션은 sql 쿼리를 실시간으로 저장한다.
따라서 cat명령어로 해당 로그를 읽어가며 오류를 확인해볼 수 있다.
또는
#> tail -f /var/lib/mysql/query.log
를 이용해서 확인이 가능하다.
'WEB > WEB HACKING' 카테고리의 다른 글
2-1) 취약점 분석을 위한 실습환경설치 (0) | 2018.03.13 |
---|---|
1-18) 아주 간단한 게시판 만들기 -5 (2) | 2018.03.09 |
1-16) 아주 간단한 게시판 만들기 -3 (0) | 2018.03.06 |
1-15) 아주 간단한 게시판 만들기 -2 (0) | 2018.03.03 |
1-14) 아주 간단한 게시판 만들기 -1 (2) | 2018.02.28 |