제로보드 관련된 유용한 정보를 공유하는 곳입니다.
  • 웹미니 한줄 전광판 영역 입니다.
글 수 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/0b3/trackback
소중한 댓글 부탁드립니다.
추천수 10단위당 메달이 1개씩 노출되고, 추천수에 따라 배경색이 변하며, 일정수의 추천수를 받을시 BEST 아이콘이 붙게됩니다.
추천수에 따른 배경색 보기 본문으로 바로가기
  • 추천수 50개이상
  • 추천수 30개이상
  • 추천수 20개이상
  • 추천수 10개이상
  • 추천수 3개이상
닫기

댓글 '1'

맑은숲 (17417)

2004.10.31 16:21:35

아흐....어려버라......ㅡ.ㅡ;;
List of Articles
번호 제목 글쓴이 날짜 추천 수 조회 수
78 게시판별로 권한 출력하기 title: [ani]깜빡이는 표정빽짱구 2005-11-20 4 2608
77 글읽기 권한 없을때 제목 클릭하면 경고창 띄우기 title: [ani]깜빡이는 표정빽짱구 2005-11-17 4 2584
76 제로보드에 글쓴이 국가 아이콘 달기 file title: [ani]깜빡이는 표정빽짱구 2005-11-17 10 4458
75 각종 검색버그 다 잡았습니다. [1] title: [ani]깜빡이는 표정빽짱구 2005-11-11 16 3233
74 제로보드 비밀글관련 보안패치 4.1 pl7 title: [ani]깜빡이는 표정빽짱구 2005-04-06 17 5435
73 best of best 로그인창에 아이디 비밀번호란 이미지넣기 title: [ani]깜빡이는 표정빽짱구 2005-04-05 28 3766
72 다운로드시 포인트 차감 + 강제 다운로드 창 뜨기. title: [ani]깜빡이는 표정빽짱구 2005-04-04 16 3891
71 업로드시 그림 파일명이 한글일경우 이름 자동 변경하기 [1] title: [ani]깜빡이는 표정빽짱구 2005-03-16 11 3742
70 자동로그인 풀림현상 100%해결법 [2] title: [ani]깜빡이는 표정빽짱구 2005-03-16 12 4552
69 일반문서에 레벨별 권한을 주는 방법 title: [ani]깜빡이는 표정빽짱구 2005-03-13 11 3012
68 실시간 쪽지함띄우기 title: [ani]깜빡이는 표정빽짱구 2005-03-09 15 3273
67 방문객이 레이어 메뉴의 회원정보 보기를 금지시키자!!! title: [ani]깜빡이는 표정빽짱구 2005-01-20 18 3335
66 best of best "where" 검색시 오류 뜨는것 해결 [1] title: [ani]깜빡이는 표정빽짱구 2005-01-02 22 2761
65 회원 탈퇴할 때 비밀번호와 주민등록번호 확인후 탈퇴시키기 title: [ani]깜빡이는 표정빽짱구 2005-01-02 16 5120
64 새로운 코멘트 달리면 코멘트숫자 색갈바꿔주기 [1] 맑은숲 2004-10-28 18 2493
63 best of best 일정조회수 되면 Cool 마크 달기. [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 21 2858
62 best of best 생일자 로그인시 축하메세지 및 축하곡 띄우기 title: [ani]깜빡이는 표정빽짱구 2004-10-24 32 3589
61 쪽지에 파일을 첨부하자!!! [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 19 5259
60 제로보드 게시판아이디 바꾸기.. file [3] title: [ani]깜빡이는 표정빽짱구 2004-10-24 18 2649
59 게시물 읽은 사람들 리스트 보여주기 [1] title: [ani]깜빡이는 표정빽짱구 2004-10-24 13 3292