티스토리 뷰

# 지난번까지의 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 를 이용하려면 service 명령어를 끄고 이용해야한다. 


# mysqld_safe 결과 실제 쿼리가 어떻게 처리되는지 확인할 수 있다.

실시간으로 파일형태로 로그를 남기는것이다.


--log 옵션은 sql 쿼리를 실시간으로 저장한다.


따라서 cat명령어로 해당 로그를 읽어가며 오류를 확인해볼 수 있다.


또는

#> tail -f /var/lib/mysql/query.log

를 이용해서 확인이 가능하다.

댓글
댓글쓰기 폼
공지사항
Total
290,627
Today
19
Yesterday
32
링크
TAG
more
«   2022/08   »
  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      
글 보관함