제로보드 관련된 유용한 정보를 공유하는 곳입니다.
  • 웹미니 한줄 전광판 영역 입니다.
글 수 98

19

조회 수 : 5259 신고 : 0

profile
작성자 : title: [ani]깜빡이는 표정빽짱구
포인트 : 56933 | 레벨 : 25
출처 :  
http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=29&sn1=&divpage=1&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=2781[관련내용 설명]

## 제로보드 글쓰기의 파일 업로드 기능을 적용시킨 것입니다.

## 확장자가 html, php 관련 문서는 업로드가 안됩니다.

## 현재 첨부용량은 특별히 제한을 두지 않았습니다.

## 첨부된 파일이 있을 경우 보낸 사람의 보낸 메세지, 받은 사람의 받은 메세지에 첨부파일이 링크돼 있어 다운로드 받을 수 있습니다.

## 업로드 된 파일은 보낸 사람이 보낸 메세지를 삭제했을 경우에 지워집니다. 즉, 받은 사람은 메세지를 삭제해도 파일은 서버상에 남아있습니다.

## 첨부된 파일의 링크는 받은 사람이 메세지를 읽었든 안 읽었든 보낸 사람이 보낸 메세지를 지우면 링크는 안보이고 메세지를 안 지우면 링크 표시가 계속 남아있습니다. 즉, 보낸 사람이 첨부파일 삭제권한을 갖습니다.
(물론 메세지를 지우면 서버에 저장된 파일도 지워지겠지요.)

## member_memo.php, member_memo2.php 파일에 일정기간이 지나도 보낸 사람이 보낸 메세지를 삭제하지 않았을 경우 자동으로 지우는 기능이 있는데,
현재는 그 부분을 건드리지 않아 메세지만 지워질 뿐 서버에 저장된 파일은 삭제되지 않습니다.(여러가지 이유로 적용 안시켰습니다.)

## 아래와 같은 방식으로 파일첨부를 두 개, 세 개 계속 늘릴 수 있습니다.

## 명랑폐인님이 만드신 애플릿을 이용한 실시간에 가까운 쪽지기능을 이용하면 일반 메신저와 가깝게 사용할 수 있으실 겁니다.
(사실 파일전송이야 업로드 속도에 큰 영향을 받으니까요.)



일단 제로보드의 디비필드와 소스를 변경하는 것이기에 사용하실 분들은 신중을 기해주시기 바랍니다.

복잡한거 같지만 천천히 따라하시면 아주 쉽습니다.

먼저 소스를 수정하기 전에 만일의 사태에 대비해 위의 4개 파일과 현재 DB의 데이터를 백업해 두시면 좋겠죠?



[수정하기]

## 먼저 수정할 파일의 이름을 알아보도록 하지요.

** view_info.php 쪽지 보내기
        기존의 디자인에 쪽지 제목 쓰는 곳과 내용 쓰는 곳 중간에 파일 첨부 input 태그를 넣어야겠죠.
        또 파일을 전송하므로 form 태그에 ENCTYPE="multipart/form-data" 를 넣어주어야 하구요.

** member_memo.php 받은 쪽지함
        받은 메모내용 앞에 첨부파일이 있으면 링크를 걸어 보여줘야 겠네요.

** member_memo2.php 보낸 쪽지함
        역시, 보낸 메모내용 앞에 첨부파일이 있으면 링크를 걸어 보여줘야 겠구요,
        보낸 쪽지를 지우면 서버에 저장된 파일을 삭제하고, 받은사람 메모중에 첨부파일 내용을 DB에서 삭제해야겠죠.

** send_message.php 쪽지 보내주는 파일
        기존처럼 쪽지도 보내고 첨부된 파일이 있을 경우 첨부파일을 서버(http://www.홈피주소.com/zboard/upfile 요건 좀 있다가 만들어야죠...)에 저장합니다.
        같은 이름의 파일이 있으면 따로 디렉토리를 만들어 저장을 할꺼구요,
        동시에 DB에 내용을 저장해 주고요.        

위의 4개 파일만 수정하면 됩니다.




자, 시작합니다.




1. 첨부될 파일이 저장될 디렉토리 만들기
제로보드 폴더 안에 upfile 이라는 디렉토리를 하나 만들고 퍼미션을 777로 주세요.





2. DB 필드 추가
요게 좀 힘드실꺼에요.... 하지만.... 유용한 팁공유를 잘 찾아보시면 필드추가하는 팁이 많이 있어요.
저도 다 여기서 배웠습니다.
텔넷에 익숙치 않으시거나 아예 텔넷이 지원 안되시는 분들은 phpMyAdmin 같은 툴을 이용하시면 아주 편리합니다.

첨부할 파일경로+파일명, 파일명이 저장될 필드 두 개를 get_memo_table 과 send_memo_table 에 모두 추가합니다.

file_name1   VARCHAR(255) NULL허용 기본값 NULL
s_file_name1 VARCHAR(255) NULL허용 기본값 NULL


만약 첨부파일이 aaa.zip 이라면
file_name1   에는 upfile/aaa.zip 이란 데이터가 저장될 것이고,
s_file_name1 에는 aaa.zip 만 저장됩니다.





3. 파일 수정입니다.

///////////////////////////////////////////////////////////////////////////

[view_info.php]

78번 라인
<form method=post action=send_message.php name=write>
이것을
<form ENCTYPE="multipart/form-data" method=post action=send_message.php name=write>



117번 라인
<tr>
  <td width=50 align=right><img src=images/vi_subject.gif></td>
  <td> <input type=text style=width:80% name=subject class=input style=border-color:#d8b3b3> <input type=hidden name=html value=0></td>
</tr>

이것을

<tr>
  <td width=50 align=right><img src=images/vi_subject.gif></td>
  <td> <input type=text style=width:80% name=subject class=input style=border-color:#d8b3b3> <input type=hidden name=html value=0></td>
</tr>
<tr>
  <td width=50 align=right>첨부</td>
  <td> <input type=file style=width:80% name="file1" class=input style=border-color:#d8b3b3;>
  </td>
</tr>

이렇게 해서 파일 첨부부분 추가

///////////////////////////////////////////////////////////////////////////




///////////////////////////////////////////////////////////////////////////

[member_memo.php]

38번 라인

// 선택된 메모가 있을시 데이타 뽑아오기;;
        if($no) {
                $now_data=mysql_fetch_array(mysql_query("select a.subject as subject, a.reg_date as reg_date, a.readed as readed, b.name as name, a.member_from as member_from, a.memo as memo from
                $get_memo_table a, $member_table b where a.member_from=b.no and a.no='$no' and a.member_no='$member[no]'"));
                if($now_data[readed]==1) {
                        mysql_query("update $get_memo_table set readed='0' where no='$no' and member_no='$member[no]'");
                        $check=mysql_fetch_array(mysql_query("select count(*) from $get_memo_table where readed='1' and member_no='$member[no]'"));
                        mysql_query("update $send_memo_table set readed='0' where reg_date='$now_data[reg_date]' and member_to='$member[no]'");
                        if(!$check[0]) mysql_query("update $member_table set new_memo='0' where no='$member[no]'");
                }
        }


이것을


// 선택된 메모가 있을시 데이타 뽑아오기;;
        if($no) {
                $now_data=mysql_fetch_array(mysql_query("select a.subject as subject, a.reg_date as reg_date, a.readed as readed, b.name as name, a.member_from as member_from, a.memo as memo, a.file_name1 as file_name1, a.s_file_name1 as s_file_name1 from
                $get_memo_table a, $member_table b where a.member_from=b.no and a.no='$no' and a.member_no='$member[no]'"));
                if($now_data[readed]==1) {
                        mysql_query("update $get_memo_table set readed='0' where no='$no' and member_no='$member[no]'");
                        $check=mysql_fetch_array(mysql_query("select count(*) from $get_memo_table where readed='1' and member_no='$member[no]'"));
                        mysql_query("update $send_memo_table set readed='0' where reg_date='$now_data[reg_date]' and member_to='$member[no]'");
                        if(!$check[0]) mysql_query("update $member_table set new_memo='0' where no='$member[no]'");
                }
        }








185번 라인

<?=autolink(nl2br(stripslashes(del_html($now_data[memo]))))?><br>

이것을
            <?
            if($now_data[s_file_name1])
                    echo("<font color=red><b>[첨부]</b></font> <a href=$now_data[file_name1]><font color=blue>$now_data[s_file_name1]</font></a><br><br>");
            ?>
            <?=autolink(nl2br(stripslashes(del_html($now_data[memo]))))?><br>


이렇게 수정합니다.

///////////////////////////////////////////////////////////////////////////




///////////////////////////////////////////////////////////////////////////

[member_memo2.php]


19~38번 라인

// 선택된 메모 삭제;;;
        if($exec=="del_all") {
                for($i=0;$i<count($del);$i++) {
                        mysql_query("delete from $send_memo_table where no='$del[$i]'");
                }
                mysql_close($connect);
                movepage("$PHP_SELF?page=$page");
        }

// 메모삭제
        if($exec=="del") {
                mysql_query("delete from $send_memo_table where no='$no' and member_no='$member[no]'");
                mysql_close($connect);
                movepage("$PHP_SELF?page=$page");
        }

// 선택된 메모가 있을시 데이타 뽑아오기;;
        if($no) {
                $now_data=mysql_fetch_array(mysql_query("select a.subject as subject, a.reg_date as reg_date, a.readed as readed, b.name as name, a.member_to as member_to, a.memo as memo from $send_memo_table a, $member_table b where a.member_to=b.no and a.no='$no' and a.member_no='$member[no]'"));
        }



이것을



// 선택된 메모 삭제;;;
        if($exec=="del_all") {
                for($i=0;$i<count($del);$i++) {
                        
                        //////////// 첨부 파일 존재하면 차례로 지우고 받은 사람 메모에서 첨부파일 부분 정보 삭제
                        $f1 = mysql_fetch_array(mysql_query("select file_name1 from $send_memo_table where no='$del[$i]'"));
                                if($f1[file_name1]){
                                        @unlink($f1[file_name1]);
                                        mysql_query("update $get_memo_table set file_name1='', s_file_name1='' where member_from='$member[no]' and file_name1='$f1[file_name1]'");
                                        
                                }
                        /////////////////////////////////////////
                                        
                        mysql_query("delete from $send_memo_table where no='$del[$i]'");
                }
                mysql_close($connect);
                movepage("$PHP_SELF?page=$page");
        }

// 메모삭제
        if($exec=="del") {
                
                //////////// 첨부 파일 존재하면 차례로 지우고 받은 사람 메모에서 첨부파일 부분 정보 삭제
                $f1 = mysql_fetch_array(mysql_query("select file_name1 from $send_memo_table where no='$no' and member_no='$member[no]'"));
                                if($f1[file_name1]){
                                        @unlink($f1[file_name1]);
                                        mysql_query("update $get_memo_table set file_name1='', s_file_name1='' where member_from='$member[no]' and file_name1='$f1[file_name1]'");
                                }
                /////////////////////////////////////////
                
                mysql_query("delete from $send_memo_table where no='$no' and member_no='$member[no]'");
                mysql_close($connect);
                movepage("$PHP_SELF?page=$page");
        }

// 선택된 메모가 있을시 데이타 뽑아오기;;
        if($no) {
                $now_data=mysql_fetch_array(mysql_query("select a.subject as subject, a.reg_date as reg_date, a.readed as readed, b.name as name, a.member_to as member_to, a.memo as memo, a.file_name1 as file_name1, a.s_file_name1 as s_file_name1 from $send_memo_table a, $member_table b where a.member_to=b.no and a.no='$no' and a.member_no='$member[no]'"));
        }
이렇게 수정해 주시구요,




174번 라인

            <?=autolink(nl2br(stripslashes(del_html($now_data[memo]))))?><br>

이것을

           <?
            if($now_data[s_file_name1])
                    echo("<font color=red><b>[첨부]</b></font> <a href=$now_data[file_name1]><font color=blue>$now_data[s_file_name1]</font></a><br><br>");
            ?>            
            <?=autolink(nl2br(stripslashes(del_html($now_data[memo]))))?><br>

이렇게 고쳐주시면 됩니다.

///////////////////////////////////////////////////////////////////////////




///////////////////////////////////////////////////////////////////////////

[send_message.php]

20번 라인부터 맨 밑부분 까지

// 쪽지 보내기일때;;
        if($kind==1$member[no]$data[no]) {
                if(isblank($subject)) Error("제목이 없습니다. 제목을 입력해 주십시오.");
                if(isblank($memo)) Error("내용이 없습니다. 내용을 입력해 주십시오.");

                $subject=addslashes($subject);
                $memo=addslashes($memo);
                $reg_date=time();



이 부분부터 아래를 전부 이렇게 바꿉니다.


// 쪽지 보내기일때;;
        if($kind==1$member[no]$data[no]) {
                if(isblank($subject)) Error("제목이 없습니다. 제목을 입력해 주십시오.");
                if(isblank($memo)) Error("내용이 없습니다. 내용을 입력해 주십시오.");

                $subject=addslashes($subject);
                $memo=addslashes($memo);
                $reg_date=time();



        /***************************************************************************
         * 업로드가 있을때
         **************************************************************************/
        if($HTTP_POST_FILES[file1]) {
                $file1 = $HTTP_POST_FILES[file1][tmp_name];
                $file1_name = $HTTP_POST_FILES[file1][name];
                $file1_size = $HTTP_POST_FILES[file1][size];
                $file1_type = $HTTP_POST_FILES[file1][type];
        }
        if($file1_size>0$file1) {

                if(!is_uploaded_file($file1)) Error("정상적인 방법으로 업로드 해주세요");
                $file1_size=filesize($file1);                

                // 업로드 금지
                if($file1_size>0) {
                        $s_file_name1=$file1_name;
                        if(eregi(".inc",$s_file_name1)||eregi(".phtm",$s_file_name1)||eregi(".htm",$s_file_name1)||eregi(".shtm",$s_file_name1)||eregi(".ztx",$s_file_name1)||eregi(".php",$s_file_name1)||eregi(".dot",$s_file_name1)||eregi(".asp",$s_file_name1)||eregi(".cgi",$s_file_name1)||eregi(".pl",$s_file_name1)) Error("Html, PHP 관련파일은 업로드할수 없습니다");

                        //확장자 검사
                        $temp=explode(".",$s_file_name1);
                        $s_point=count($temp)-1;

                        $file1=eregi_replace("\\","\",$file1);
                        $s_file_name1=str_replace(" ","_",$s_file_name1);
                        $s_file_name1=str_replace("-","_",$s_file_name1);

                        // 디렉토리를 검사함
                        if(!is_dir("upfile")) {
                                @mkdir("upfile",0777);
                                @chmod("upfile",0777);
                        }

                        // 중복파일이 있을때;;
                        if(file_exists("upfile/".$s_file_name1)) {
                                @mkdir("upfile/".$reg_date,0777);
                                if(!move_uploaded_file($file1,"upfile/".$reg_date."/".$s_file_name1)) Error("파일업로드가 제대로 되지 않았습니다");
                                $file_name1="upfile/".$reg_date."/".$s_file_name1;
                                @chmod($file_name1,0777);
                                @chmod("upfile/".$reg_date,0777);
                        } else {
                                if(!move_uploaded_file($file1,"upfile/".$s_file_name1)) Error("파일업로드가 제대로 되지 않았습니다");
                                $file_name1="upfile/".$s_file_name1;  
                                @chmod($file_name1,0777);
                        }
                }
          }

        ///////////////////////////////////////////////////////////////////////////

                mysql_query("insert into $get_memo_table (member_no,member_from,subject,memo,readed,reg_date,file_name1,s_file_name1) values ('$data[no]','$member[no]','$subject','$memo',1,'$reg_date','$file_name1','$s_file_name1')") or error(mysql_error());
                mysql_query("insert into $send_memo_table (member_to,member_no,subject,memo,readed,reg_date,file_name1,s_file_name1) values ('$data[no]','$member[no]','$subject','$memo',1,'$reg_date','$file_name1','$s_file_name1')") or error(mysql_error());
                mysql_query("update $member_table set new_memo=1 where no='$data[no]'") or error(mysql_error());
                echo"<script language="javascript">alert("$data[name] 님께 쪽지를 보냈습니다");window.close();</script>";
        }

        mysql_close($connect);
?>


///////////////////////////////////////////////////////////////////////////




끝났습니다.

성공하시길 빌면서....

profile 글쓴이 빽짱구

단점이 없는 사람은 장점도 거의 없다 - 에이브러햄 링컨

엮인글 :
https://web.webmini.net/zb4/17416/199/trackback
소중한 댓글 부탁드립니다.
추천수 10단위당 메달이 1개씩 노출되고, 추천수에 따라 배경색이 변하며, 일정수의 추천수를 받을시 BEST 아이콘이 붙게됩니다.
추천수에 따른 배경색 보기 본문으로 바로가기
  • 추천수 50개이상
  • 추천수 30개이상
  • 추천수 20개이상
  • 추천수 10개이상
  • 추천수 3개이상
닫기

댓글 '1'

맑은숲 (17417)

2004.10.31 16:21:35

아흐....어려버라......ㅡ.ㅡ;;
List of Articles
번호 제목 글쓴이 날짜 추천 수sort 조회 수
78 best of best 게시물내용 읽을권한이 없을때 경고창 띄우고 회원가입 페이지로 이동 title: [ani]깜빡이는 표정빽짱구 2006-10-23 23 5001
77 best of best 내가 올린글에 달린 댓글(코멘트)를 원하는 만큼 모아보자 title: [ani]깜빡이는 표정빽짱구 2004-10-18 23 3316
76 best of best 회원이 적은 글에 코멘트달면 해당회원에게 쪽지로 알려주기 title: [ani]깜빡이는 표정빽짱구 2004-07-05 23 2229
75 best of best 회원가입시/수정시 글자제한하기 title: [ani]깜빡이는 표정빽짱구 2004-02-24 23 2379
74 best of best "where" 검색시 오류 뜨는것 해결 [1] title: [ani]깜빡이는 표정빽짱구 2005-01-02 22 2761
73 best of best 일반게시물에 최근 코멘트 달리면 코멘트숫자 색깔 변하게 하기 [1] title: [ani]깜빡이는 표정빽짱구 2004-07-12 22 2589
72 best of best 회원가입후 기본포인트 부여하기 title: [ani]깜빡이는 표정빽짱구 2004-04-20 22 2386
71 best of best 도배방지 하루 글쓰기 코맨트쓰기 제한하기 title: [ani]깜빡이는 표정빽짱구 2004-04-10 22 5542
70 best of best 회원가입시 나이제한하기 [1] title: [ani]깜빡이는 표정빽짱구 2004-03-07 22 2471
69 best of best 일정조회수 되면 Cool 마크 달기. [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 21 2858
68 best of best 글 작성 후 내용 자동으로 클립되기 [3] title: [ani]깜빡이는 표정빽짱구 2004-10-18 21 3248
67 best of best 회원가입시 추천인을 입력받도록하자 title: [ani]깜빡이는 표정빽짱구 2004-04-12 21 2709
66 best of best 현제접속자 title: [ani]깜빡이는 표정빽짱구 2004-08-14 20 2783
65 best of best 회원가입시 가입약관 먼저보여주기 title: [ani]깜빡이는 표정빽짱구 2004-03-06 20 3198
64 자동로그인 경고창에서 [확인] 클릭시 바로 로그인 title: [ani]깜빡이는 표정빽짱구 2006-10-23 19 5085
63 쪽지에 파일을 첨부하자!!! [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 19 5259
62 제로보드에 글이 올라오면 실시간으로 알려주는 프로그램 title: [ani]깜빡이는 표정빽짱구 2004-10-18 19 3138
61 새로올라온 게시물에 new아이콘 달기 [1] title: [ani]깜빡이는 표정빽짱구 2004-04-12 19 2177
60 제로카운터 설치법 (펌) [2] title: [ani]깜빡이는 표정빽짱구 2004-04-08 19 4176
59 회원탈퇴시 관리자에게 자동쪽지 오게하기 title: [ani]깜빡이는 표정빽짱구 2004-02-11 19 2569