#!/usr/local/bin/perl $chk_total_num = 0; #============================================================================# # Program Name - Sepal's SPBOARD v4.5 # # Programer - Kim se youn (madgf@hanmail.net, sepal@spfamily.com) # # Homepage - http://sepal.woorizip.com or http://www.spfamily.com # # Last Modified - 2001.01.19 # # made in Korea # #============================================================================# ############################################################################## $main_dir = "/afs/postech.ac.kr/lab/cse/dpe/www/spboard/"; #id디렉토리가 있는곳의 디랙토리 절대 경로 #$main_url = "http://dpnm.postech.ac.kr/spboard/"; #id디렉토리가 있는곳의 URL #$cgi_url = "http://dpnm.postech.ac.kr/spboard/board.cgi"; #이 cgi파일의 URL #$img_url = "http://dpnm.postech.ac.kr/spboard/img"; #img URL $main_url = "/spboard/"; #id디렉토리가 있는곳의 URL $cgi_url = "/spboard/board.cgi"; #이 cgi파일의 URL $img_url = "/spboard/img"; #img URL $sendmail = "/usr/lib/sendmail_nosendmail"; #sendmail 위치 $NT = "0"; #자동 폼메일 사용하지 않을려면 $NT="1"로... ############################################################################## ############################################################################## #아래 설정은 게시판 정식구입자를 위한 것입니다. #기능상 차이는 없으며 게시판 아래 홈링크를 바꾸는 설정입니다... ^.^ ############################################################################## $customer = "0"; #정식구입자는 1로... $copyright = "Copyright ⓒ by Company name. All rights reserved."; #Copyright ############################################################################## umask(000); $tpl_dir = $main_dir; $id_dir = "$main_dir/id"; $cgiskin_dir = "$main_dir/skin"; $img_dir = "$main_dir/img"; #&chk_addr($ENV{'HTTP_REFERER'}); &chk_ip; &parseArgument; if ($FORM{'id'} !~ /\./ ) { &selectAction; } else { print "Content-type: text/html\n\n"; print "\n"; print "ERROR!!!\n"; print "\n"; print "



접근금지

"; print "\n"; print "\n"; exit; } # 무단링크 방지 체킹함수입니다. # 사용하기 위해서는 32째줄의 &chk_addr 앞의 #을 없애 주어야 함. # 아래 sub chk_addr {} 함수의 #도 없애야 함. # # 사용법: spboard디렉토리 밑의 id디렉토리안에 ok_addr.cgi파일을 만들고 # 그곳에 링크가능한 URL이나 ip를 한줄에 하나씩 적어주시면 됩니다. # #sub chk_addr{ # my($http_referer, @referer, $ok_addr, @ref_data, $success_cnt); # $http_referer = shift; # if($http_referer){ # @referer = split(/\//, $http_referer); # $ok_addr = $referer[2]; # # open(REF, "$id_dir/ok_addr.cgi"); # chomp(@ref_data = ); # close(REF); # # $success_cnt = 0; # foreach(@ref_data) { # if($ok_addr eq $_){ # $success_cnt++; # } # } # &error("bad_link") if($success_cnt == 0); # } #} sub chk_ip{ my(@ip_list); open (BAD_IP, "$id_dir/bad_ip.cgi"); chomp(@ip_list = ); close(BAD_IP); foreach (@ip_list) { if($ENV{'REMOTE_ADDR'} eq $_) { $CONF{'font_size'} = "9pt"; $CONF{'bgcolor'} = "#FFFFFF"; $img_url = "$img_url/skin/mori"; &error("bad_ip"); } } } sub parseArgument { my($name,$value,$content_type,$content_length,$buffer,$dump,$boundary,$line,$array_value); my(@pairs,@column,%CGI); if($ENV{'QUERY_STRING'}) { @pairs = split(/&/,$ENV{'QUERY_STRING'}); foreach (@pairs) { ($name, $value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $FORM{$name} = $value; } } else { $content_type = $ENV{'CONTENT_TYPE'}; $content_length = $ENV{'CONTENT_LENGTH'}; binmode STDIN; read(STDIN,$buffer,$content_length); if((!$content_type) || ($content_type eq 'application/x-www-form-urlencoded')) { @pairs = split(/&/, $buffer); foreach (@pairs) { ($name, $value) = split(/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $FORM{$name} = $value; } } elsif($content_type =~ m#^multipart/form-data#) { ($boundary = $content_type) =~ s/^.*boundary=(.*)$/$1/; @pairs = split(/--$boundary/, $buffer); @pairs = splice(@pairs,1,$#pairs-1); foreach (@pairs) { ($dump,$line,$value) = split(/\r\n/,$_,3); if($line =~ /filename/) { $real_file = $line; } next if $line =~ /filename=\"\"/; $line =~ s/^Content-Disposition: form-data; //; (@column) = split(/;\s+/, $line); ($name = $column[0]) =~ s/^name="([^"]+)"$/$1/g; if($#column > 0) { if($value =~ /^Content-Type:/) { ($dump,$dump,$value) = split(/\r\n/,$value,3); } else { ($dump,$value) = split(/\r\n/,$value,2); } } else { ($dump,$value) = split(/\r\n/,$value,2); if(grep(/^$name$/, keys(%CGI))) { if(@{$FORM{$name}} > 0) { push(@{$FORM{$name}}, $value); } else { $array_value = $FORM{$name}; undef $FORM{$name}; $FORM{$name}[0] = $array_value; push(@{$FORM{$name}}, $value); } } else { next if $value =~ /^\s*$/; $FORM{$name} = $value; chop($FORM{$name}); chop($FORM{$name}); } next; } $FORM{$name} = $value; } } else { print "Invalid content type!\n"; exit(1); } } $main_dir = "$main_dir/id/$FORM{'id'}"; $main_url = "$main_url/id/$FORM{'id'}"; } sub selectAction { local($page, $type_url, $face_url, %CONF, @week, @quick_id, @quick_name, @lock_week); $page = $FORM{'page'} ? "$FORM{'page'}" : "1"; if((-d "$main_dir") && ($FORM{'id'} ne "")) { &get_env; my(@page_list, @prev, @next, $start, $prev, $next); local(@ary, @gr_color, $act, $list_num, $total_page); if($CONF{'templet'} ne ""){ #=========================== # 그라데이션 생성... ^.^ #=========================== open(TPL, "$tpl_dir/tpl/$CONF{'templet'}"); $tpl_col = ; close(TPL); @col_list = split(/\|/,$tpl_col); my($r_val, $g_val, $b_val, $mr, $mg, $mb); $r_val = $col_list[1]; $g_val = $col_list[2]; $b_val = $col_list[3]; $mr = $col_list[4]; $mg = $col_list[5]; $mb = $col_list[6]; for(0..$CONF{'page_num'}+1){ $gr_color[$_] = &color_man($r_val,$g_val,$b_val); if($_ eq $CONF{'page_num'}) { $mr *= 21; $mg *= 21; $mb *= 21; } $r_val = (($r_val - $mr) <= 0) ? 1 : int($r_val - $mr); $g_val = (($g_val - $mg) <= 0) ? 1 : int($g_val - $mg); $b_val = (($b_val - $mb) <= 0) ? 1 : int($b_val - $mb); } $CONF{'head_color'} = $gr_color[$#gr_color]; #$CONF{'hfont_color'} = $gr_color[0]; $CONF{'ncel_color'} = $gr_color[int($CONF{'page_num'}/2)]; $CONF{'cel_color1'} = $gr_color[1]; $CONF{'cel_color2'} = $gr_color[2]; } $type_url = "$img_url/type"; $dongury_url = "$img_url/dongury"; $face_url = "$img_url/face"; $img_url =($CONF{'img_skin'} ne "") ? "$img_url/skin/$CONF{'img_skin'}" : "$img_url/skin/default"; $act = $FORM{'action'}; if($act eq "") { &display; } else{ &{$act}; } } else{ $CONF{'font_size'} = "9pt"; $CONF{'bgcolor'} = "#FFFFFF"; $img_url = "$img_url/skin/mori"; if($FORM{'id'} eq ""){ &error("id"); } else{ &error("no_dir"); } } } sub cookie{ my(@cookies); if($ENV{'HTTP_COOKIE'}) { @cookies = split(/; /,$ENV{'HTTP_COOKIE'}); foreach(@cookies) { my ($name,$value) = split(/=/,$_); $COOKIE{$name} = $value; } } print "Set-Cookie: $cook=$ENV{'REMOTE_ADDR'}$FORM{'id'}$FORM{'action'}$FORM{'number'};\r\n" if($act ne "multi_view"); } sub get_env{ if(open(CONF,"$main_dir/conf.cgi")) { foreach (){ if (/(\w+)\s*=\s*(.*?)\s*$/){ $CONF{$1} = $2; } } close(CONF); #======================================= # 업그레이드자를 위하여... ^.^ #======================================= $CONF{'link_color'} ||= "#283FCF"; $CONF{'find_interval'} ||= 1000; $CONF{'skin'} ||= ""; #======================================= @quick_id = split(/\|/,$CONF{'quick_id'}); @quick_name = split(/\|/,$CONF{'quick_name'}); @lock_week = split(/\|/, $CONF{'lock_week'}); } else { mkdir("$main_dir/data",0777); mkdir("$main_dir/files",0777); mkdir("$main_dir/idx",0777); $CONF{'admin_pwd'} = "1234"; $CONF{'admin_only'} = "no"; $CONF{'page_num'} = "10"; $CONF{'max_data'} = "100000"; $CONF{'sendmail_ok'} = "yes"; $CONF{'admin_sender'} = "no"; $CONF{'admin_mail'} = "your\@email.net"; $CONF{'home_url'} = "http://yourhome.net"; $CONF{'tbl_width'} = "90%"; $CONF{'admin_name'} = "주인장"; $CONF{'font_color'} = "#000000"; $CONF{'link_color'} = "#283FCF"; $CONF{'ncel_color'} = "#C3D6E7"; $CONF{'head_color'} = "#2962D5"; $CONF{'hfont_color'} = "#ffffff"; $CONF{'cel_color1'} = "#FAFCFD"; $CONF{'cel_color2'} = "#EDF4FA"; $CONF{'select_color'}= "#C3D6E7"; $CONF{'num_color'} = "#1504B9"; $CONF{'date_color'} = "#FF6666"; $CONF{'read_color'} = "#0A5818"; $CONF{'down_color'} = "#283FCF"; $CONF{'over_color'} = "#E9E9E9"; $CONF{'bgcolor'} = "#ffffff"; $CONF{'background'} = ""; $CONF{'logo_txt'} = "활짝~ 열린 게시판 ^.^"; $CONF{'logo_img'} = ""; $CONF{'sub_length'} = "47"; $CONF{'name_length'} = "10"; $CONF{'line_length'} = "1"; $CONF{'view_ip'} = "yes"; $CONF{'pds_ok'} = "no"; $CONF{'max_size'} = "4.5"; $CONF{'down_view'} = "no"; $CONF{'kind_view'} = "yes"; $CONF{'etc_ok'} = "no"; $CONF{'scr_opt'} = "no"; $CONF{'img_skin'} = "mori"; $CONF{'skin'} = ""; $CONF{'point_ok'} = "no"; $CONF{'font_kind'} = "돋움"; $CONF{'font_size'} = "9pt"; $CONF{'left_right'} = "center"; $CONF{'search_ok'} = "yes"; $CONF{'find_interval'} = "1000"; $CONF{'pnt_cnt'} = "10"; $CONF{'i_opt'} = "no"; $CONF{'speed_up'} = "yes"; $CONF{'templet'} = "ocean_blue.txt"; $CONF{'dgr_ok'} = "no"; $CONF{'quick_id'} = "|"x7; $CONF{'quick_name'} = "|"x7; $CONF{'lock_week'} = "|"x7; &save_env; } } sub save_env { $CONF{'admin_pwd'} = crypt($CONF{'admin_pwd'},"sp"); open(CONF,">$main_dir/conf.cgi"); foreach (sort keys %CONF) { print CONF "$_ = $CONF{$_}\n"; } close(CONF); } #-------------------------------------------------------------- # 게시판 리스트 출력 ^.^ - 메인화면 디자인 수정은 이곳에서... #-------------------------------------------------------------- sub print_list{ if($CONF{'skin'} ne ""){ require "./skin/$CONF{'skin'}"; &main_face; } else{ my($d, $color_val, $up_td, $bsk_td, $io_td, $zero_col, $search_option, $view_option); local($down_col, $pnt_col, $pre_pg, $next_pg); $down_col="다운" if($CONF{'down_view'} eq "yes"); $pnt_col="추천" if($CONF{'point_ok'} eq "yes"); # $scount = (($page-1)*$CONF{'page_num'}); # $icount = 0; $d = 0; $pre_pg= $page - 1; $next_pg = $page + 1; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action","multi_view"); print &Input("hidden","page","$page"); if($act eq "search"){ print &Input("hidden","category","$FORM{'category'}"); print &Input("hidden","keyword","$FORM{'keyword'}"); print &Input("hidden","start_num","$FORM{'start_num'}"); } &top_btn; &Thead("100%","","0","0"); $color_val = $CONF{'head_color'} ? "bgcolor=$CONF{'head_color'}": ""; print "\n"; &Tfoot; $up_td = ($CONF{'kind_view'} eq "yes")? "  " : ""; $bsk_td = ""; $io_td = ($CONF{'i_opt'} eq "yes") ? "ⓘ" : ""; if($page eq $total_page){ print ""; } &Thead("100%","","1","0"); print "$bsk_tdⓝ$up_td글 제 목작성자$io_td작성일조회$down_col $pnt_col\n"; &read_notice if(($page eq "1") && ($FORM{'category'} eq "")); if($cou eq "0" || (($page eq "1") && ($ary[0] eq ""))){ $zero_col = "7"; if($CONF{'down_view'} eq "yes"){ $zero_col++; } if($CONF{'point_ok'} eq "yes"){ $zero_col++; } if($CONF{'i_opt'} eq "yes"){ $zero_col++; } my($no_msg) = ("$FORM{'category'}") ? "^.^ 찾으시는 글이 없어요!" : "^.^ 등록된 글이 없습니다. ^.^"; my($over_msg) = &over("$no_msg"); my($color_val) = ($CONF{'cel_color1'}) ? "bgcolor=$CONF{'cel_color1'}" : ""; print "$no_msg\n"; } else{ my($start, $end, $no_data); $start = $CONF{'page_num'}*($page - 1); $end = $start + $CONF{'page_num'} - 1; $no_data = $list_num - (($page-1)*$CONF{'page_num'}); my($chk_num) = 0; my(@gubun, @open, $open_val, $eval, $num, $read_num, $down_num, $man_cnt, $pnt_val, $e_val, $pnt_gif, $pnt_img); local(@down_data, $file_name, $file_size, $type); for($start..$end) { last if($ary[$_] eq ""); $num = $ary[$_]; #$icount++; #if($icount > $scount) { open(FILE,"$main_dir/data/$num"); local @data = ; close (FILE); &file_type; open(NUM, "$main_dir/num/$num"); $num_data = ; close(NUM); @gubun = split(/\|/,"$num_data"); my($read_num) = $gubun[1]; my($down_num) = $gubun[2]; if($CONF{'point_ok'} eq "yes"){ $man_cnt = $gubun[3] ? "$gubun[3]" : "0"; $pnt_val = $gubun[4] ? "$gubun[4]" : "0"; $e_val = $man_cnt ? ($pnt_val/$man_cnt) : "0"; $e_val = ($e_val eq "100")? 100 : substr($e_val,0,2); if(($e_val > 90) && ($e_val <= 100)){ $pnt_gif = "100.gif"; } elsif(($e_val > 70) && ($e_val <= 90)){ $pnt_gif = "80.gif"; } elsif(($e_val > 50) && ($e_val <= 70)){ $pnt_gif = "60.gif"; } elsif(($e_val > 30) && ($e_val <= 50)){ $pnt_gif = "40.gif"; } elsif(($e_val > 10) && ($e_val <= 30)){ $pnt_gif = "20.gif"; } else{ $pnt_gif = "0.gif"; } $pnt_gif = "gray/$pnt_gif" if($man_cnt < $CONF{'pnt_cnt'}); $pnt_img = "\"추천인수"; } $read_num = $read_num ? "$read_num" : "0"; #------------------------------------------------------------------------------ my(@push, $rotate, $w_name, $home_img, $rdate, $gul_icon, $subject, $x_num, $gul_sub, $kword, $mailto, $mail_img, $read_val); local(@list, $tr_color); $d++; if($CONF{'templet'} ne ""){ $tr_color = $gr_color[$d-1]; } else{ $rotate = $d%2; $tr_color = ($rotate eq "0") ? "$CONF{'cel_color2'}" : "$CONF{'cel_color1'}"; } @list = split(/\|/, $data[1]); @open = split(/\|/, $data[4]); $open_val = $open[2]; if(($down_data[5] eq "") && ($down_data[4] eq "")) { $file_icon = "\"옆에 "; $down_num = "*"; $img_ok = "no"; } else{ $type = &file_icon("$type"); $img_ok = (($type eq "gif.gif") || ($type eq "jpg.gif") || ($type eq "jpeg.gif")) ? "ok" : "no"; $file_icon = ($open_val ne "no") ? "\"$file_name($file_size) " : "\"이파일은"; $down_num = $down_num ? "$down_num" : "0"; } $w_name = &cut_len("$list[0]","$CONF{'name_length'}"); $home_img = $list[2] ? "\"$list[0]님": ""; $rdate=substr($list[4],5,5); if(-M "$main_dir/data/$num" < 1.0) { $gul_icon = ($num =~/-/) ? "newans.gif" : "newgul.gif"; $gul_icon = "new_lock.gif" if($open_val eq "no"); } else{ $gul_icon = ($num =~/-/) ? "ans.gif" : "gul.gif"; $gul_icon = "lock.gif" if($open_val eq "no"); } $subject = "\"Simple "; @push = split(/-/,$num); shift(@push); #---------------------------------------------------[ 제목글 길이 제한 ] $x_num = @push; $gul_sub = &cut_len("$list[3]", "$CONF{'sub_length'}"); $x_num *=17; #--------------------------------------------------- #---------------------------------------------------[간단의견 갯수조회] if((-e "$main_dir/etc/$num") && ($CONF{'etc_ok'} eq "yes")){ open(ETC, "$main_dir/etc/$num"); my @etc = grep(!/^\s/, ); close(ETC); my $etc_num = $#etc+1; $gul_sub .= (-M "$main_dir/etc/$num" < 1.0) ? " [$etc_num]" : " [$etc_num]" if($etc_num > 0); } #--------------------------------------------------- #---------------------------------------------------[검색시 검색어 구별] if($act eq "search"){ $kword = "$FORM{'keyword'}"; $gul_sub =~ s/$kword/$kword<\/font><\/b>/g if(($FORM{'category'} eq "subject") || ($FORM{'category'} eq "sub_cmt")); $w_name =~ s/$kword/$kword<\/font><\/b>/g if($FORM{'category'} eq "name"); } #-------------------------------------------------------------------------------- if($list[1]) { if($NT eq "1"){ $mailto = "$w_name"; $mail_img = "\"$list[0]님에게"; } else{ $mailto = "$w_name"; $mail_img = "\"$list[0]님에게"; } } else { $mailto = "$w_name"; $mail_img= ""; } my($icon_td, $num_col, $pnt_kind, $m_subject, $mh_td, $chk_td, $over_msg, $color_val); $icon_td = ($CONF{'kind_view'} eq "yes") ? "$file_icon" : ""; $num_col = "$down_num" if($CONF{'down_view'} eq "yes"); $pnt_kind = "$pnt_img" if($CONF{'point_ok'} eq "yes"); if(($num eq $FORM{'number'}) && ($act ne "modify_ok") && ($act ne "multi_view")){ $m_subject = "$subject $gul_sub\n"; $tr_color = $CONF{'select_color'}; } else{ $search_option = "&category=$FORM{'category'}&keyword=$FORM{'keyword'}&start_num=$FORM{'start_num'}" if($FORM{'category'} ne ""); $m_subject = " $subject $gul_sub\n"; #여러글 보기에서 읽고있는글 선택색으로 되게... ^.^ if($act eq "multi_view"){ for(0..$#view_num){ if($view_num[$_] eq "$num"){ $tr_color = $CONF{'select_color'}; last; } } } } $mh_td = "$mail_img $home_img" if($CONF{'i_opt'} eq "yes"); $chk_td = ""; $over_msg = &over(" ▷▷ $no_data 번 글 읽기 ^.^ "); $color_val = ($tr_color) ? "bgcolor=$tr_color" : ""; print "$chk_td$no_data$icon_td $m_subject$mailto$mh_td$rdate$read_num$num_col $pnt_kind\n"; $chk_num++; #} $no_data--; #last if($d >= $CONF{'page_num'}); $chk_total_num = $chk_num; } } $zero_col = "6"; if($CONF{'down_view'} eq "yes"){ $zero_col++; } if($CONF{'point_ok'} eq "yes"){ $zero_col++; } if($CONF{'i_opt'} eq "yes"){ $zero_col++; } if($CONF{'kind_view'} eq "yes"){ $zero_col++; } $zero_col -= 2; print "\n"; # print ""; print " "; print ""; print ""; print ""; } # 스킨 끝... ^^ &pagemove; $search_option .= "&action=search" if($act eq "search"); $view_option = "&action=view&number=$FORM{'number'}&img=$FORM{'img'}" if($act eq "view"); print "\"reload\"\n"; &Tfoot; &Ffoot; print "
\n"; } # sub print_list{} 끝 --------------------------------------------- sub over{ my($msg) = $_[0]; return "onMouseOver=\"this.style.backgroundColor='$CONF{'over_color'}';window.status=('$msg');return true;\" onMouseOut=\"this.style.backgroundColor='$tr_color'; window.status=('');return true;\""; } sub display { if((-e "$main_dir/idx/$page.cgi") && ($FORM{'category'} eq "")){ open(NUM, "$main_dir/idx/num.cgi"); $list_num = ; close(NUM); if($list_num eq "0" || $list_num eq ""){ #------------------ 글삭제시 게시판에 글이 하나도 남지 않아을 경우... &read_idx; $list_num = @ary; $total_page = int($list_num/$CONF{'page_num'}); if(($total_page*$CONF{'page_num'}) < $list_num) {$total_page += 1;} } else{ $total_page = int($list_num/$CONF{'page_num'}); if(($total_page*$CONF{'page_num'}) < $list_num) {$total_page += 1;} open(PAGE, "$main_dir/idx/$page.cgi"); @page_list = ; close(PAGE); if($page_list[0] eq "\n"){ #---------- 맨마지막 페이지에서 글 삭제시 그 페이지에 글이 하나도 없을경우... $page=$page - 1; open(PAGE, "$main_dir/idx/$page.cgi"); @page_list = ; close(PAGE); } $start =($page-1)*$CONF{'page_num'}; for(1..$CONF{'page_num'}){ chomp($ary[$start+$_-1] = $page_list[$_-1]); if($page_list[$_] eq "\n"){ last; } } if($page ne "1"){ $prev = $page - 1; open(PREV,"$main_dir/idx/$prev.cgi"); @prev = ; close(PREV); chomp($ary[$prev*$CONF{'page_num'} - 1] = $prev[$#prev]); } if($page ne "$total_page"){ $next = $page + 1; open(NEXT,"$main_dir/idx/$next.cgi"); @next = ; close(NEXT); chomp($ary[$page*$CONF{'page_num'}] = $next[0]); } } } else{ #------------------------------------------- 인덱스 파일 이용 &read_idx; $list_num = @ary; $total_page = int($list_num/$CONF{'page_num'}); if(($total_page*$CONF{'page_num'}) < $list_num) {$total_page += 1; } $page = $total_page if("$FORM{'total_val'}"); } #--------------------------------------------------------- $total_page = 1 if($total_page == 0); my($next_num, $prev_num, $prev_page, $next_page, $category, $keyword, $start_num, $simple); if(($act eq "view") || ($act eq "etc_write") || ($act eq "etcdel_ok")){ unless($FORM{'category'} eq ""){ for(0..$list_num){ if($FORM{'number'} eq $ary[$_]){ $next_num = $ary[$_-1]; $prev_num = $ary[$_+1]; last; } } } else{ for(($page-1)*$CONF{'page_num'}..$page*$CONF{'page_num'}-1){ if($FORM{'number'} eq $ary[$_]){ $next_num = $ary[$_-1]; $prev_num = $ary[$_+1]; last; } } } $category = $FORM{'category'} ? "&category=$FORM{'category'}" : ""; $keyword = $FORM{'keyword'} ? "&keyword=$FORM{'keyword'}" : ""; $start_num = $FORM{'start_num'} ? "&start_num=$FORM{'start_num'}" : ""; $simple = $FORM{'simple'} ? "&simple=yes" : ""; $prev_page = (($ary[($page-1)*$CONF{'page_num'}-1] eq "$next_num") && ($category eq "")) ? ($page -1) : "$page" ; $next_page = (($ary[$page*$CONF{'page_num'}] eq "$prev_num") && ($category eq "")) ? ($page + 1) : "$page"; my(@ndata, @nline, @pdata, @pline, $next_data, $prev_data); open(NEXT, "$main_dir/data/$next_num"); @ndata = ; @nline = split(/\|/,$ndata[1]); $nline[3] = &cut_len("$nline[3]","$CONF{'sub_length'}"); $next_data = "
▲ $nline[3] - $nline[0]"; close (NEXT); open(PREV, "$main_dir/data/$prev_num"); @pdata = ; @pline = split(/\|/,$pdata[1]); $pline[3] = &cut_len("$pline[3]","$CONF{'sub_length'}"); $prev_data = " ▼ $pline[3] - $pline[0]"; close (PREV); &Thead("100%","","3","0"); print "\n"; print "     $next_data
" if($FORM{'number'} ne $ary[0]); print "     $prev_data" if($FORM{'number'} ne $ary[$list_num-1]); print ""; &Tfoot; print "
\n"; } elsif($act eq "multi_view"){ } else{ &head; } if(($FORM{'category'} eq "") && ($FORM{'simple'} ne "yes")){ if(@quick_id){ &quick_btn; } &print_list; &find if($CONF{'search_ok'} eq "yes"); } &foot; } sub down_file { my($t_file); &plus_num; if(($FORM{'file'}=~ /http:\/\/.+/) || ($FORM{'file'}=~ /ftp:\/\/.+/)){ print "Location:$FORM{'file'}\n\n"; } else { #cgi파일이나 이미지 파일의 다운로드 구현을 위하여... ($t_file = $FORM{'file'}) =~ s{^.+/(.+)$}{$1}g; print "Content-type: application/octet-stream\n"; print "Content-disposition: attachment; filename=$t_file\n"; print "Content-Transfer-Encoding: binary\n\n"; open( DOWN, "$main_dir/files/$FORM{'file'}" ); binmode DOWN; binmode STDOUT; binmode STDERR; print ; close DOWN; } exit; } sub plus_num{ my(@num_gubun, $number_data, $ans_number); open(NUM, "$main_dir/num/$FORM{'number'}"); $number_data = ; close(NUM); @num_gubun = split(/\|/,"$number_data"); $ans_number = $num_gubun[0]; $read_number = $num_gubun[1]; $down_number = $num_gubun[2]; $man_cnt = $num_gubun[3] ? "$num_gubun[3]" : "0"; $pnt_val = $num_gubun[4] ? "$num_gubun[4]" : "0"; $e_val = $man_cnt ? ($pnt_val/$man_cnt) : "0"; if($e_val > 90 && $e_val <= 100){ $face_val = "\"우왕~"; } elsif($e_val > 70 && $e_val <= 90){ $face_val = "\"음~"; } elsif($e_val > 50 && $e_val <= 70){ $face_val = "\"쫴매"; } elsif($e_val > 30 && $e_val <= 50){ $face_val = "\"음~"; } elsif($e_val > 10 && $e_val <= 30){ $face_val = "\"이게"; } else{ $face_val = "\"추천좀"; } $e_val = ($e_val eq "100")? 100 : substr($e_val,0,2); mkdir("$main_dir/num",0777) unless(-e "$main_dir/num"); if($FORM{'cnt'} ne "no"){ $cook = "$FORM{'id'}$FORM{'action'}$FORM{'number'}"; &cookie; if($COOKIE{$cook} ne "$ENV{'REMOTE_ADDR'}$cook"){ $read_number++ if(($act eq "view") || ($act eq "multi_view")); $down_number++ if($act eq "down_file"); } &lock if($CONF{'speed_up'} eq "no"); open(NFI,">$main_dir/num/$FORM{'number'}"); print NFI "$ans_number|$read_number|$down_number|$man_cnt|$pnt_val|"; close(NFI); &unlock if($CONF{'speed_up'} eq "no"); } } sub file_type{ my(@name_data, @cgi, @file_type, $n_num); #-------------------------------------- [ 파일종류 아이콘 ]--------------------------- @down_data = split(/\|/,$data[5]); $file_name = "$down_data[5]"; if($down_data[4] ne ""){ @name_data = split(/\//,$down_data[4]); $n_num = @name_data - 1; if($name_data[$n_num] =~/\?/){ @cgi = split(/\?/,"$name_data[$n_num]"); $file_name = $cgi[1]; } else{ $file_name = "$name_data[$n_num]"; } $f_name = "$down_data[4]"; $file_size = "링크파일"; } else{ $f_name = $file_name; $file_size = "$down_data[6]"; } @file_type = split(/\./,$file_name); $type = $file_type[$#file_type]; $type = "cgi" if(($NT && ($file_type[$#file_type] eq "txt") && (($file_type[$#file_type-1] eq "cgi") || ($file_type[$#file_type-1] eq "pl") || ($file_type[$#file_type-1] eq "asp"))) || (($file_type[$#file_type] eq "txt") && (($file_type[$#file_type-1] =~ "php")))); } sub file_icon{ # 아이콘 이름 추출 함수... ^.^ 원하시는 종류를 추가하시면 됩니다... my(@icon, @quick_img); my($type, $type_ok); $type = $_[0]; $type_ok = "0"; @icon = qw(unknown comp img exe cgi ra html mpeg); @1 = qw(rar arj ace tar gz lzh tgz iso); #comp.gif 압축파일 @2 = qw(pcx png tif psd ico); #img.gif 그림파일 @3 = qw(bat com); #exe.gif 실행파일 @4 = qw(asp pl pm php php3 php4); #cgi.gif 문서파일 @5 = qw(ram); #ra.gif 리얼오디오 @6 = qw(shtml swf fla css); #htm.gif html 파일 @7 = qw(mpg mov avi rm asx asf wma); #mpeg.gif 동영상파일 @quick_img = qw(zip hwp mp3 htm html ra wav mid gif jpg jpeg bmp exe cgi doc ppt xls mpeg txt pdf); #quick_img에는 가장 많이 사용하는 확장자 이미지를 type디렉에 넣으시고 배열에 추가시키셔면 됩니다... for(0..$#quick_img){ if(lc($type) eq "$quick_img[$_]"){ $type = "$quick_img[$_].gif"; $type_ok = "1"; last; } } if($type_ok ne "1"){ EXIT: for(1..$#icon){ for $key(@$_){ if(lc($type) eq $key){ $type = "$icon[$_].gif"; $type_ok = "1"; last EXIT; } } } } if($type_ok ne "1"){ $type = "$icon[0].gif"; } return "$type"; } sub read_notice{ my(@gul, @notice, $subject, $comment, $wdate, $die_year, $die_mon, $die_day, $notice_td, $href); #========================[ 공지사항 체크 ]======================================== if((-e "$main_dir/notice.cgi") && ($act ne "view")){ open(FILE,"$main_dir/notice.cgi"); @gul = ; @notice = split(/\|/,$gul[0]); close (FILE); $subject = "$notice[1]"; #---------------------------------------------------[간단의견 갯수조회] if((-e "$main_dir/etc/notice.cgi") && ($CONF{'etc_ok'} eq "yes")){ open(ETC, "$main_dir/etc/notice.cgi"); my @etc = grep(!/^\s/, ); close(ETC); my $etc_num = $#etc+1; $subject .= (-M "$main_dir/etc/notice.cgi" < 1.0) ? " [$etc_num]" : " [$etc_num]" if($etc_num > 0); } #--------------------------------------------------- $comment = $notice[2]; $wdate = substr($notice[3],5,5); ($die_year, $die_mon, $die_day) = split(/:/, $notice[4]); open(NUM,"$main_dir/num/notice.cgi"); $read_num = ; $read_num = $read_num ? "$read_num" : "0"; close(NUM); &get_date; $notice_td = "^.^" if($CONF{'down_view'} eq "yes"); if($NT eq "0"){ $href = "javascript:newin(400, 267, 'sendmail.cgi?name=$CONF{'admin_name'}&mail=$CONF{'admin_mail'}&prog=$sendmail&home_url=$CONF{'home_url'}','spmail')"; } else{ $href = "mailto:$CONF{'admin_mail'}"; } my($ad_mail, $ad_home, $ad_td, $pnt_td, $colspan, $color_val, $over_msg, $notice_line); $ad_mail = "\"$CONF{'admin_mail'}\""; $ad_home = "\"$CONF{'home_url'}\""; $ad_td = "$ad_mail $ad_home" if($CONF{'i_opt'} eq "yes"); $pnt_td = "\"Smile~" if($CONF{'point_ok'} eq "yes"); $colspan = ($CONF{'kind_view'} eq "yes")? "colspan=4" : "colspan=3"; $color_val = $CONF{'ncel_color'} ? "bgcolor=$CONF{'ncel_color'}" : ""; $over_msg = &over(" ▷▷ 공지사항 보기"); $notice_line = " $subject$CONF{'admin_name'}$ad_td$wdate$read_num$notice_td $pnt_td\n"; if($die_year eq $year){ if($die_day < $mday){ if($die_mon <= $mon){ unlink ("$main_dir/notice.cgi") ; unlink ("$main_dir/num/notice.cgi"); unlink ("$main_dir/etc/notice.cgi"); } else{ print $notice_line; } } else{ if($die_mon < $mon){ unlink ("$main_dir/notice.cgi") ; unlink ("$main_dir/num/notice.cgi"); unlink ("$main_dir/etc/notice.cgi"); } else{ print $notice_line; } } } elsif($die_year > $year){ print $notice_line; } else{ unlink ("$main_dir/notice.cgi") ; unlink ("$main_dir/num/notice.cgi"); unlink ("$main_dir/etc/notice.cgi"); } } #========================[ 공지사항 체크 끝]======================================== } sub for_print { my(@gul_list, @gul_data, @cmt_data, @auto, @etc_data, $name, $mail, $mail_val, $home, $home_val, $auto_br, $auto_link, $subject, $wdate); open(GUL, "$main_dir/data/$FORM{'number'}"); @gul_list = ; close(GUL); @gul_data = split(/\|/, $gul_list[1]); $name = $gul_data[0]; $mail = $gul_data[1]; $mail_val = "
전자우편: $mail" if($mail); $home = $gul_data[2]; $home_val = "
홈페이지: $home" if($home); $subject= $gul_data[3]; $wdate = $gul_data[4]; @cmt_data = split(/\|/,$gul_list[2]); @auto = split(/\|/, $gul_list[4]); $auto_link = $auto[0]; $auto_br = $auto[1]; if ($cmt_data[0] ne "1") { $cmt_data[1] =~ s/
/\r\n/g; $cmt_data[1] =~ s//>/g; $cmt_data[1] =~ s/"/"/g; # $cmt_data[1] =~ s/<hr>/
/g; $cmt_data[1] =~ s/\r?\n/
/g; $cmt_data[1] =~ s/
/\r\n/g if($auto_br ne "1"); } else{ $cmt_data[1] =~ s/
/\r\n/g if($auto_br ne "1"); $cmt_data[1] =~ s/<br>/
/g; $cmt_data[1] =~ s/<p>/

/g; } if($auto_link eq "1"){ $cmt_data[1] =~ s/(http:\/\/)([\w\+\-\/\=\?\.\~\&]+)/ $1$2<\/font><\/a>/g; if($NT eq "1"){ $cmt_data[1] =~ s/([\w\-]+\@[\w\-+\.]+[\w\-]+)/ $1<\/font><\/a>/g; } else{ $cmt_data[1] =~ s/([\w\-]+\@[\w\-+\.]+[\w\-]+)/ $1<\/font><\/a>/g; } } $cmt_data[1] = &view_dongury("$cmt_data[1]") if($CONF{'dgr_ok'} eq "yes"); @etc_data = split(/\|/,$gul_list[5]); my(@name_data, @cgi, @file_type, $file_name, $n_num, $type, $img_view); if($etc_data[5] ne ""){ $file_name = $etc_data[5]; } else{ @name_data = split(/\//,$etc_data[4]); $n_num = @name_data - 1; if($name_data[$n_num] =~/\?/){ @cgi = split(/\?/,"$name_data[$n_num]"); $file_name = $cgi[1]; } else{ $file_name = "$name_data[$n_num]"; } } @file_type = split(/\./,$file_name); $type = $file_type[1]; $type = lc($type); if(($type eq "gif") || ($type eq "jpg") || ($type eq "jpeg")){ if($etc_data[4] ne ""){ $img_view = "

"; } else{ $img_view = "

"; } } my($os_data) = $ENV{'HTTP_USER_AGENT'}; $CONF{'font_size'} = "10pt"; #프린트 할때 글자 크기... ^^ print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n"; print "\n"; print "$subject\n"; print "\n"; print "\n"; print "\n"; print "\n"; &Thead("100%","","3",""); print "\n"; print "제목: $subject

\n"; print "작성자: $name
작성일: $wdate\n"; print "$mail_val $home_val

\n"; print "$cmt_data[1]\n"; print "$img_view\n" if($img_view); print "\n"; &Tfoot; print "\n"; exit; } sub to_email{ my($num, $fname, $fmail, $tname, $tmail, $comment, $send_it, $cls_win); $num = $FORM{'number'}; $fname = &Input("text","fname","","","","19",""); $fmail = &Input("text","fmail","","","","19",""); $tname = &Input("text","tname","","","","19",""); $tmail = &Input("text","tmail","","","","19",""); $comment = &Textarea("30","3","comment","","",""); $send_it = &Input("submit","","보내기"); $cls_win = "

\n"; print "Content-type: text/html\n\n"; print "게시물 e-mail로 보내기\n"; print "\n"; print "\n"; print "\n"; print "
\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","action","send_gul"); print &Input("hidden","number","$num"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","simple","yes"); print "\n"; &Thead("315","","3","0",); print "▣게시물 e-mail로 보내기 ▣\n"; print "보내는이 이름$fname\n"; print "보내는이 e-mail$fmail\n"; print "받는이 이름$tname\n"; print "받는이 e-mail$tmail\n"; print "Message$comment\n"; print "\n"; print "$send_it $cls_win\n"; print "\n"; &Tfoot; print "\n"; &Ffoot; print "
\n"; } sub send_gul{ my(@list, @sub_list, @seper, @etc_data, $name, $mail, $wmail_to, $home, $subject, $wdate, $pre_view, $file_name, $mailto, $auto_link, $auto_br); $mail_addr = $_[0]; if($mail_addr ne ""){ $FORM{'tmail'} = $mail_addr; $FORM{'tname'} = $CONF{'admin_name'}; $FORM{'number'} = $_[1]; } if($FORM{'tmail'} eq ""){ &error("send"); } unless($FORM{'tmail'} =~ /.*\@.*\..*/){ &error("send"); } open(GUL, "$main_dir/data/$FORM{'number'}"); @list = ; close(GUL); @sub_list = split(/\|/, $list[1]); $name = $sub_list[0]; $mail = $sub_list[1]; $wmail_to = $mail ? "
$name" : "$name"; $home = $sub_list[2]; $subject = $sub_list[3]; $wdate = $sub_list[4]; @auto = split(/\|/, $list[4]); $auto_link = $auto[0]; $auto_br = $auto[1]; @etc_data = split(/\|/,$list[5]); $pre_view = $etc_data[3]; $file_name = (($etc_data[5] eq "") && ($etc_data[4] eq ""))? "" : "$etc_data[5]"; @seper = split(/\|/,$list[2]); if ($seper[0] ne "1") { $seper[1] =~ s/
/\r\n/g; $seper[1] =~ s//>/g; $seper[1] =~ s/"/"/g; # $seper[1] =~ s/<hr>/
/g; $seper[1] =~ s/\r?\n/
/g; $seper[1] =~ s/
/\r\n/g if($auto_br ne "1"); } else{ $seper[1] =~ s/
/\r\n/g if($auto_br ne "1"); $seper[1] =~ s/<br>/
/g; $seper[1] =~ s/<p>/

/g; } # if($auto_link eq "1"){ # $seper[1]=~ s/(http:\/\/)([\w\+\-\/\=\?\.\~\&]+)/$1$2<\/font><\/a>/g; # $seper[1]=~ s/([\w\-]+\@[\w\-+\.]+[\w\-]+)/$1<\/font><\/a>/g; # } $mailto = ($FORM{'fmail'}) ? "$FORM{'fname'}" : "$FORM{'fname'}"; $FORM{'comment'} =~ s/\r\n/
/g; &get_date; if($mail_addr ne ""){ $FORM{'fname'} = $sub_list[0]; $FORM{'fmail'} = $sub_list[1]; } my $to_mail = "$FORM{'tname'} <$FORM{'tmail'}>"; my $from_mail = "$FORM{'fname'} <$FORM{'fmail'}>"; open (MAIL, "|$sendmail -t") || die "화일 열기 실패!\n"; print MAIL "To: $to_mail\n"; print MAIL "From: $from_mail\n"; print MAIL "Subject: $CONF{'logo_txt'} 게시물이 배달 되었습니다.\n"; print MAIL "Content-Type: text/html; charset=euc-kr\n"; print MAIL "\n"; print MAIL "

\n"; print MAIL "\n"; print MAIL "\n"; print MAIL "
▣$subject▣
\n"; print MAIL "\n"; print MAIL "\n"; print MAIL "\n"; print MAIL "
\n"; print MAIL "보낸 날짜: $date
\n"; print MAIL "보낸 사람:$mailto
\n" if($mailto); print MAIL "Message: $FORM{'comment'}\n" if($FORM{'comment'}); print MAIL "
\n"; print MAIL "\n"; print MAIL "게시판 DB명: $FORM{'id'}
\n"; print MAIL "작성자: $wmail_to
\n"; print MAIL "홈 URL: $home
\n" if($home); print MAIL "제목:$subject
\n"; print MAIL "
\n"; print MAIL "$seper[1]\n"; print MAIL "

This message from $CONF{'home_url'}   

\n"; print MAIL "
\n"; print MAIL "
\n"; close (MAIL); if($mail_addr eq ""){ local $send_end = "1"; &load_page; } } sub view { my($chk_num, $dis_opt) = @_; my(@views, @Temp, @auto, @etc_data, @cgi, @file_type, @md, @tm, @seper, $auto_link, $auto_br, $domain, $ip, $pre_view, $file_name, $n_num, $f_name, $file_size, $type, $down_msg, $img_view, $file_down, $down_count, $w_info, $pdate, $year, $month, $sday, $stime, $smin, $mod_date, $homepage); local($read_number, $down_number, $man_cnt, $pnt_val, $e_val, $wpass, $pass); $FORM{'number'} = "$chk_num" if($chk_num ne ""); open(VFILE, "$main_dir/data/$FORM{'number'}"); @views = ; close(VFILE); chomp($wpass = $views[0]); @Temp = split(/\|/, $views[1]); @auto = split(/\|/, $views[4]); $auto_link = $auto[0]; $auto_br = $auto[1]; $open_val = $auto[2]; if($open_val eq "no"){ if($FORM{'passwd'} eq ""){ &open_login("$Temp[3]"); next if($act eq "multi_view"); } else{ $pass = crypt($FORM{'passwd'},"sp"); if($FORM{'number'} =~ /-/){ my @org = split(/-/,$FORM{'number'}); my($org_num) = $org[0]; open(ORG, "$main_dir/data/$org_num.cgi"); my @org_data = ; close(ORG); my @open = split(/\|/,$org_data[4]); my $open_ok = $open[2]; chomp($wpass = $org_data[0]) if($open_ok eq "no"); } unless(($pass eq $CONF{'admin_pwd'}) || ($pass eq $wpass)){ &error("pass"); } } } unless($views[4] =~ /\|/) { #3차 업그레이드 자를 위해... 나중에 삭제???? $auto_br = "1"; $auto_link = "1" if(chomp($views[4]) eq "1"); } &plus_num; @etc_data = split(/\|/,$views[5]); $ip=$etc_data[1]; $domain=$etc_data[2]; if(($etc_data[5] eq "") && ($etc_data[4] eq "")) { $down_number = "*"; $img_view = ""; $file_down = ""; $pre_view = ""; } else{ $down_number = $down_number? "$down_number" : "0"; #----------------------------------------- $file_name = "$etc_data[5]"; if($etc_data[4] ne ""){ @name_data = split(/\//,$etc_data[4]); $n_num = @name_data - 1; if($name_data[$n_num] =~/\?/){ @cgi = split(/\?/,"$name_data[$n_num]"); $file_name = $cgi[1]; } else{ $file_name = "$name_data[$n_num]"; } $f_name = "$etc_data[4]"; $file_size = "링크파일"; } else{ $f_name = $file_name; $file_size = "$etc_data[6]"; } @file_type = split(/\./,$file_name); $type = $file_type[$#file_type]; $type = lc($type); if(($type eq "gif") || ($type eq "jpg") || ($type eq "jpeg")){ $down_msg = "다운받으시려면 그림 위에서 마우스 오른쪽 버튼을 누르신뒤 다른이름으로 그림저장(익스플로러).. Save Images As(넷스케이프)를 선택하세요..."; if($etc_data[4] ne ""){ $img_view = "

\"$down_msg\"

"; } else{ $img_view = "

\"$down_msg\"

"; } } else{ $img_view=""; } #------------------------------------------------- } $down_count = "  다운수 [ $down_number ]" if($CONF{'down_view'} eq "yes"); $w_info = (($ip ne "") && ($domain ne "") && ($CONF{'view_ip'} eq "yes"))? "

$ip - $domain" : "
"; $pdate = substr($Temp[4],0,10); @md = split(/\//,$pdate); $year=$md[0]; $month=$md[1]; $sday=$md[2]; @tm = split(/:/,substr($Temp[4],12,5)); $stime = $tm[0]; if($stime <= 11){ $stime = "오전 $stime"; } elsif($stime == 12){ $stime = "오후 $stime"; } else{ $stime -= 12; $stime = "오후 $stime"; } $smin = $tm[1]; $mod_date = $Temp[5] if(($Temp[5] ne "\n") && ($Temp[5] ne "")); $homepage = ($Temp[2] ne "") ? "\"$Temp[2]\"" : ""; @seper = split(/\|/,$views[2]); if ($seper[0] ne "1") { $seper[1] =~ s/
/\r\n/g; $seper[1] =~ s//>/g; $seper[1] =~ s/"/"/g; # $seper[1] =~ s/<hr>/


/g; $seper[1] =~ s/\r?\n/
/g; $seper[1] =~ s/
/\r\n/g if($auto_br ne "1"); } else{ $seper[1] =~ s/
/\r\n/g if($auto_br ne "1"); $seper[1] =~ s/<br>/
/g; $seper[1] =~ s/<p>/

/g; } #------------------------------------------| 검색어 구분... ^.^ if(($FORM{'category'} eq "comment") || ($FORM{'category'} eq "sub_cmt")){ $kword = "$FORM{'keyword'}"; $seper[1] =~ s/$kword/$kword<\/font><\/b>/g; } #$seper[1] =~ s/\r\n/
/g; if($auto_link eq "1"){ $seper[1]=~ s/(http:\/\/)([\w\+\-\/\=\?\.\~\&]+)/ $1$2<\/font><\/a>/g; if($NT eq "1"){ $seper[1]=~ s/([\w\-]+\@[\w\-+\.]+[\w\-]+)/ $1<\/font><\/a>/g; } else{ $seper[1]=~ s/([\w\-]+\@[\w\-+\.]+[\w\-]+)/ $1<\/font><\/a>/g; } } $seper[1] = &view_dongury("$seper[1]") if($CONF{'dgr_ok'} eq "yes"); if($etc_data[5] ne ""){ $file_down = "
\"다운로드\"$etc_data[5] [ $etc_data[6] ]
"; $pre_view = "
\"미리보기\"미리보기
" if(($etc_data[3] ne "") && ($etc_data[3] ne "http://")); } elsif($etc_data[4] ne ""){ $file_down = "
\"$file_name [ 링크파일 ]
"; $pre_view = "
\"미리보기\"미리보기
" if(($etc_data[3] ne "") && ($etc_data[3] ne "http://")); } my(@apt, @sub_data, $kword, $acou, $ans_number, $subnumber, $kind, $mailto, $link, $sel_point); @apt = split(/-/,$FORM{'number'}); $acou = @apt; @sub_data = split(/\./,$FORM{'number'}); $num_data = $sub_data[0]; if($ans_number eq "") { $subnumber = "$num_data-1"; } else { $ans_number++; $subnumber = "$num_data-$ans_number"; } if($Temp[1]) { if($NT eq "0"){ $kind = "javascript:newin(400, 267, 'sendmail.cgi?name=$Temp[0]&mail=$Temp[1]&prog=$sendmail&home_url=$CONF{'home_url'}','spmail')"; } else{ $kind = "mailto:$Temp[1]"; } $mailto = "$Temp[0]
$Temp[1]"; } else{ $mailto = "$Temp[0]"; } if($FORM{'simple'} eq "yes") { $CONF{'tbl_width'} = "520"; } &head if($dis_opt eq ""); $link = "
$file_down$pre_view
\n"; $sel_point = "
▶▶추천하기 20점\"이게40점\"에잉~별루다~\"60점\"쬐매80점\"음~100점\"우와~ 
추천인수[$man_cnt명] 평균점수[$e_val점] 총점수[$pnt_val점] 평가 $face_val
\n" if($CONF{'point_ok'} eq "yes"); print "

\n"; &Thead("100%","","1","0"); print "작성자 [ $mailto $homepage ] - $year년 $month월 $sday일 $stime시 $smin분에 남기신 글\n"; print "\n"; &Thead("100%","","0","0"); my($color_val) = $CONF{'head_color'} ? "bgcolor=$CONF{'head_color'}": ""; print "\n"; &Tfoot; &Thead("100%", "", "0","0"); print "ⓝ $Temp[3]\n"; print ""; my($basic_height, $sim_val); if($FORM{'simple'} ne "yes"){ print "조회수 [ $read_number ] $down_count\n"; $basic_height = "220"; } else{ $basic_height = "170"; $sim_val = "&simple=yes"; } print "\"수정\n"; print "\"삭제  \n"; &Tfoot; print "\n"; print "\n"; &Thead("100%", "$CONF{'cel_color1'}", "5","0"); print "

\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action","point_up"); print &Input("hidden","number","$FORM{'number'}"); print &Input("hidden","img","$FORM{'img'}"); print &Input("hidden","page","$page"); print &Input("hidden","simple","$FORM{'simple'}"); if($FORM{'category'}){ print &Input("hidden","category","$FORM{'category'}"); print &Input("hidden","keyword","$FORM{'keyword'}"); } print "$link$sel_point
$seper[1] $img_view\n"; print "\n" unless($NT); print "
"; print "이메일로 보내기...\"게시물을    프린트버젼 보기...\"프린트   
$w_info  
"; print "Last modified - $mod_date  
\n" if(($mod_date ne "") && (length($mod_date) > 10)); &Ffoot if($CONF{'point_ok'} eq "yes"); #---------------------------------------------------------------------- if($CONF{'etc_ok'} eq "yes"){ print "\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","action","etc_write"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","page","$page"); print &Input("hidden","img","$FORM{'img'}"); print &Input("hidden","number","$FORM{'number'}"); print &Input("hidden","simple","$FORM{'simple'}"); if($FORM{'category'}){ print &Input("hidden","category","$FORM{'category'}"); print &Input("hidden","keyword","$FORM{'keyword'}"); } &Thead("100%","","3","0"); print "\n"; print &Input("submit","", "남기기"); print "  \"간단의견\n"; my(@etc, $end_num, $search_opt, $gd); if(-e "$main_dir/etc/$FORM{'number'}"){ open (ETC, "$main_dir/etc/$FORM{'number'}"); @etc = ; close (ETC); chop(@etc); $end_num = @etc; $search_opt = "&category=$FORM{'category'}&keyword=$FORM{'keyword'}" if($FORM{'category'} ne ""); @color = ('#FF0000', '#FF0000', '#FF9F47', '#FF9F47', '#009900', '#009900', '#0C2099', '#0C2099', '#991098', '#991098'); for(0..$end_num-1){ if($etc[$_] ne ""){ my @gubun = split(/\|/,$etc[$_]); $gd = $_ + 1; print "\"$gd번째 $gubun[0]\n"; } } } &Tfoot; &Ffoot; } else{ print "
\n"; } #--------------------------------------------------------------- print "\n"; &Tfoot; print "\n"; &Tfoot; &Thead("100%","","0","0"); # my($color_val) = $CONF{'head_color'} ? "bgcolor=$CONF{'head_color'}": ""; print "\n"; &Tfoot; &Thead("100%", "", "1", ""); print "\n"; if($FORM{'simple'} eq "yes"){ print "

\n"; } else{ if($FORM{'category'} eq ""){ print "\"답변작성\"" if($acou <= 8); print "\"목록보기\"\n"; } else{ print "\"검색\"글

\n"; } } print "\n"; &Tfoot; &display if($dis_opt eq ""); } sub view_dongury{ my $input = $_[0]; my %DGR = ( 'dong1' => '캬~', 'dong2' => '숯댕이~', 'dong3' => '이씨~', 'dong4' => '두통~', 'dong5' => '엉엉~', 'dong6' => '냠냠~', 'dong7' => '세원~', 'dong8' => '경림~', 'dong9' => '쌈박질~', 'dong10' => '에~', 'dong11' => '메롱~', 'dong12' => '감기~', 'dong13' => '움~', 'dong14' => '흠~', 'dong15' => '행복~', 'dong16' => '신사~', 'dong17' => '간호사~', 'dong18' => '의사~', 'dong19' => '쿨쿨~', 'dong20' => '궁금~', 'dong21' => '방긋~', 'dong22' => '미소~', 'dong23' => '욱~', 'dong24' => '이런~', 'dong25' => '뺑코~', 'dong26' => '뜨악~', 'dong27' => '졸려~', 'dong28' => '사랑~', 'dong29' => '이히~', 'dong30' => '끄아악~', 'dong31' => '스마일~', 'dong32' => '헤~', 'dong33' => '멋쟁이~', 'dong34' => '군인~', 'dong35' => '괴물~', 'dong36' => '맛있당~', 'dong37' => '잉~', 'dong38' => '부들~', 'dong39' => '우~', 'dong40' => '하하~', 'dong41' => '부상~', 'dong42' => '마름~', # 'dong43' => '투덜~', # 'dong44' => '의심~', # 'dong45' => '왕따~', # 'dong46' => '와우~', # 'dong47' => '엥~', # 'dong48' => '안경~', # 'dong49' => '모자1~', # 'dong50' => '모자2~', # 'dong51' => '옹~', # 'dong52' => '깔깔~', # 'dong53' => '흥~', # 'dong54' => '에휴~', # 'dong55' => '화남~', # 'dong56' => '흐미~', # 'dong57' => '훌쩍~', # 'dong58' => '썬글러스~', ); foreach (keys(%DGR)) { $input =~ s/$DGR{$_}/\"$DGR{$_}\"/g; } return $input; } sub multi_view{ if($FORM{'mv.x'} eq ""){ &admin_chkdel; } my(@check, @chk_img, @ndata, @ncgi, @ftype, $cnt, $fname, $nnum, $type); local(@view_num); $cnt = 0; for (0..$CONF{'page_num'}-1){ $chk_num = "num_val$_"; if($FORM{$chk_num}){ $view_num[$cnt] = "$FORM{$chk_num}"; $cnt++; } } if($view_num[0] eq ""){ &error("no_select"); } CUT: for(0..$#view_num){ #--- 넷스에서 이미지를 봤을때 라인헤이트 옵션 없애기... open (IMGOK, "$main_dir/data/$view_num[$_]"); @check = ; close(IMGOK); @chk_img = split(/\|/,$check[5]); if(($chk_img[5] ne "") || ($chk_img[4] ne "")) { $fname = "$chk_img[5]"; if($chk_img[4] ne ""){ @ndata = split(/\//,$chk_img[4]); $nnum = @ndata - 1; if($ndata[$nnum] =~/\?/){ @ncgi = split(/\?/,"$ndata[$nnum]"); $fname = $ncgi[1]; } else{ $fname = "$ndata[$nnum]"; } } @ftype = split(/\./,$fname); $type = $ftype[1]; $type = lc($type); $FORM{'img'} = (($type eq "gif") || ($type eq "jpg") || ($type eq "jpeg")) ? "ok" : "no"; last CUT if($FORM{'img'} eq "ok"); } } &head; for(0..$#view_num){ &view("$view_num[$_]","0"); } print "

"; &display; &foot; } sub multi_del{ my($pass) = crypt($FORM{'passwd'},"sp"); if($CONF{'admin_pwd'} ne $pass) { &error("pass"); } my(@del_num, @ldata, @file_data, @ary, $cnt, $chk_num ); $cnt = 0; for (0..$CONF{'page_num'}-1){ $chk_num = "num_val$_"; if($FORM{$chk_num}){ $del_num[$cnt] = "$FORM{$chk_num}"; $cnt++; } } for(0..$#del_num){ open(FILE,"$main_dir/data/$del_num[$_]"); @ldata = ; @file_data = split(/\|/,$ldata[5]); close (FILE); unlink "$main_dir/data/$del_num[$_]"; unlink "$main_dir/num/$del_num[$_]"; unlink "$main_dir/etc/$del_num[$_]"; unlink "$main_dir/files/$file_data[5]"; &auto_erase("$del_num[$_]"); } &repair_idx; } sub etc_write{ my(@etc, $new_etc, $etc_num); mkdir("$main_dir/etc",0777) unless(-e "$main_dir/etc"); open (DATA, "<$main_dir/etc/$FORM{'number'}"); @etc = ; chop(@etc); close (DATA); $new_etc = "$FORM{'etc'}|$ENV{'REMOTE_ADDR'}"; $etc_num = @etc; $etc_num++; if($etc_num > 9){ $etc_num =9; } if($FORM{'etc'} ne ( "" || "※ 간단의견 남기기" )){ &word_chk("$FORM{'etc'}"); #나쁜단어 체킹 #=================================================================================== #도배방지 쿠키적용 같은제목 같은내용의 글을 올릴시에 도배인정 ^.^. &read_cookie; if($COOKIE{'DOBAE'} eq "$ENV{'REMOTE_ADDR'}$FORM{'etc'}$FORM{'number'}"){ &error("dobae"); } print "Set-Cookie: DOBAE=$ENV{'REMOTE_ADDR'}$FORM{'etc'}$FORM{'number'};\r\n"; #=================================================================================== open (ETC, ">$main_dir/etc/$FORM{'number'}"); print ETC "$new_etc\n"; for(0..$etc_num-1){ print ETC "$etc[$_]\n"; } close (DATA); } if($FORM{'number'} eq "notice.cgi"){ &view_notice; } else{ &view; } } sub input_form{ my ($name, $email, $homepage, $passwd, $html, $auto_link, $auto_br, $open_val,$subject, $pre_view, $comments, $file_name, $link_file, $submit, $reset); local($week_val); &get_date; &read_cookie; &head; for(0..6){ #-------------------------- 쉬는 요일 ^^ if($week_val eq $lock_week[$_]){ $lock_val = "ok"; } } if($lock_val eq "ok"){ print "

 

 

 


\n"; print "매주\n"; foreach(0..$#lock_week){ print "$lock_week[$_]요일" if($lock_week[$_] ne ""); print ", " if(($_ ne "$#lock_week") && ($lock_week[$_] ne "")); } print "은 쉽니다...\n"; print "
\n"; print "



\n"; } else{ if($CONF{'admin_only'} eq "yes"){ print "[알림!!!] 이 게시판은 현재 관리자만 글을 쓸수 있게 설정되었습니다.\n"; } $name = &Input("text","name","$COOKIE{'UN'}","","","14","30"); $email = &Input("text","email","$COOKIE{'UM'}","","","26",""); $home_val = $COOKIE{'UH'} ? "$COOKIE{'UH'}" : "http:\/\/"; $homepage = &Input("text","homepage", "$home_val","","","51",""); $passwd = &Input("password","passwd","","","","10",""); $html = &Checkbox("html","1",""); $auto_link = &Checkbox("auto_link","1",""); $auto_br = &Checkbox("auto_br","1","1"); $open_val = "" if($CONF{'scr_opt'} eq "yes"); $subject = &Input("text", "subject", "","","","70",""); $pre_view = &Input("text", "pre_view", "http:\/\/","","","70",""); $comments = &Textarea("70","8","comments"); $file_name = &Input("file", "file_name","","","", "54",""); $link_file = &Input("text", "link_file", "","","","54",""); $submit = &Input("submit",""," 글 올림 "); $reset = &Input("reset", "", "다시작성"); # &Fhead("POST","$cgi_url","multipart/form-data","form"); &input_java; print "
"; print &Input("hidden","action","write"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","ip","$ENV{'REMOTE_ADDR'}"); print &Input("hidden","domain","$ENV{'HTTP_USER_AGENT'}"); &Thead("","$CONF{'head_color'}","3","0"); print "ⓝ 글 남기기...\n"; print "\n"; &Thead("","$CONF{'head_color'}","2","3"); print "이      름$name\n"; print "   e-mail $email\n"; print "홈페이지\n"; print "$homepage\n"; print "비밀번호$passwd"; print "$htmlhtml허용 $auto_link자동링크 $auto_br자동줄바꿈     $open_val\n"; print "제      목$subject\n"; print "미리보기$pre_view\n" if($CONF{'pds_ok'} eq "yes"); print "
내      용\n"; print "$comments\n"; &call_dgr; print "
동 글 이$dongury_tbl\n" if($CONF{'dgr_ok'} eq "yes"); print "
특수문자$chr_tbl\n"; print "파일첨부$file_name\n" if($CONF{'pds_ok'} eq "yes"); print "링크파일$link_file [ 최대 $CONF{'max_size'} MB ]\n" if($CONF{'pds_ok'} eq "yes"); print "$submit $reset\n"; &Tfoot; print "\n"; &Tfoot; &Ffoot; } print "\"글

\n"; &foot; } sub input_java{ print <<__JAVA__; __JAVA__ } sub ok_admin{ print <<__OK__;

관리자 Password

__OK__ } sub notice_form{ my($n_mon, $die_year, $die_mon, $die_day, $subject, $html, $auto_link, $comments, $ok_btn, $rs_btn); if($FORM{'passwd'} eq $CONF{'admin_pwd'}){ &get_date; $n_mon = sprintf("%02d", $mon + 1); if($n_mon > 12){ $year++; $n_mon = "01"; } $die_year = &Input("text","die_year","$year","","","4","4"); $die_mon = &Input("text","die_mon","$n_mon","","","2","2"); $die_day = &Input("text","die_day","","","","2","2"); $subject = &Input("text","subject","","","","70",""); $html = &Checkbox("html","1",""); $auto_link = &Checkbox("auto_link","1","checked"); $auto_br = &Checkbox("auto_br","1","checked"); $comments = &Textarea("70","8","comments"); $ok_btn = &Input("submit", "", " 글 올림 "); $rs_btn = &Input("reset", "", "다시작성"); &head; print "
\n"; &Fhead("POST", "$cgi_url", "", "form"); print &Input("hidden","action","adminwrite"); print &Input("hidden","id","$FORM{'id'}"); &Thead("","$CONF{'head_color'}","3","0"); print "ⓝ 공지사항 남기기...\n"; print "\n"; &Thead("","$CONF{'head_color'}","3","3"); print "\n"; print "만 기 일\n"; print "$die_year년\n"; print "$die_mon월\n"; print "$die_day일 (예: 2002년 06월 01일)\n"; print "내용옵션$htmlhtml허용\n"; print "$auto_link자동링크\n"; print "$auto_br자동줄바꿈\n"; print "제      목$subject\n"; print " $comments\n"; &call_dgr; print "
동 글 이$dongury_tbl\n" if($CONF{'dgr_ok'} eq "yes"); print "
특수문자$chr_tbl\n"; print " "; &ok_admin; print "\n"; print "$ok_btn $rs_btn\n"; &Tfoot; &Ffoot; print "\"글

\n"; &foot; } else{ &error("pass"); } } sub modify_form { my(@data, @seper, @auto, @pds_data, $pass, $html, $htmlvalue, $comment, $ansnum, $alink, $abr, $open_ok, $org_open, $open_yes, $open_no, $link_val, $br_val, $pv_value, $link_value, $file_name, $file_size, $down_num); open(DATA,"$main_dir/data/$FORM{'number'}"); chomp(@data = ); $pass = $data[0]; my($name, $email, $homepage, $subject, $wdate, $readnum) = split(/\|/,$data[1]); $name =~ s/\"/"/g; # 수정시 " 표시 살림... $subject =~ s/\"/"/g; @seper= split(/\|/,$data[2]); $html=$seper[0]; $htmlvalue = ($html eq "1") ? "checked" : ""; $seper[1] =~ s/
/\n/g; $comment=$seper[1]; $comment =~ s/<br>/
/g; $comment =~ s/&/&/g; $comment =~ s//>/g; $ansnum=$data[3]; @auto = split(/\|/, $data[4]); $alink = $auto[0]; $abr = $auto[1]; $open_ok = $auto[2]; if($open_ok ne "no"){ $open_yes = "selected"; } else{ $open_no = "selected"; if($FORM{'number'} =~ /-/){ my @org = split(/-/,$FORM{'number'}); my($org_num) = $org[0]; open(ORG, "$main_dir/data/$org_num.cgi"); my @org_data = ; close(ORG); my @org_val = split(/\|/, $org_data[4]); $org_open = $org_val[2]; } } $link_val = ($alink eq "1") ? "checked" : ""; $br_val = ($abr eq "1") ? "checked" : ""; @pds_data = split(/\|/,$data[5]); $pv_value = $pds_data[3]; $link_value = $pds_data[4]; $file_name = $pds_data[5]; $file_size = $pds_data[6]; $down_num = $pds_data[7]; close (DATA); my($name_val, $email_val, $home_val, $home_chk, $auto_link, $auto_br, $open_val, $sub_val, $pre_val, $com_val, $link_file); $name_val = &Input("text","name","$name","","","14","30"); $email_val = &Input("text","email","$email","","","26",""); $home_val = &Input("text","homepage","$homepage","","","51",""); $home_chk = &Checkbox("html","1","$htmlvalue"); $auto_link = &Checkbox("auto_link", "1", "$link_val"); $auto_br = &Checkbox("auto_br", "1", "$br_val"); $open_val = ($org_open eq "no") ? &Input("hidden","open","no") : "" if($CONF{'scr_opt'} eq "yes"); $sub_val = &Input("text", "subject", "$subject", "","","70",""); $pre_val = &Input("text", "pre_view", "$pv_value", "", "", "70", ""); $com_val = Textarea("70","8","comments","","","$comment"); $link_file = &Input("text", "link_file", "$link_value", "", "", "70", ""); &head; &input_java; #&Fhead("POST","$cgi_url","","form"); print ""; print &Input("hidden","action","modify_ok"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","page","$page"); print &Input("hidden","number","$FORM{'number'}"); print &Input("hidden","ansnum","$ansnum"); print &Input("hidden","date","$wdate"); print &Input("hidden","file_name","$file_name"); print &Input("hidden","file_size","$file_size"); print &Input("hidden","passwd","$FORM{'passwd'}"); print &Input("hidden","ip","$ENV{'REMOTE_ADDR'}"); print &Input("hidden","domain","$ENV{'HTTP_USER_AGENT'}"); print &Input("hidden","down_num","$down_num"); print &Input("hidden","simple","$FORM{'simple'}"); &Thead("","$CONF{'head_color'}","3","0"); print "ⓝ $name님의 글을 수정합니다.\n"; print "\n"; &Thead("","$CONF{'head_color'}","3","0"); print "이      름\n"; print "$name_val    e-mail $email_val\n"; print "홈페이지$home_val\n"; print &Input("hidden","org_passwd","$pass"); print "내용옵션$home_chkhtml허용\n"; print "$auto_link자동링크\n"; print "$auto_br자동줄바꿈     $open_val\n"; print "제      목$sub_val\n"; print "미리보기$pre_val\n" if(($file_name ne "") or ($link_value ne "")); print "
내      용$com_val   \n"; &call_dgr; print "
동 글 이$dongury_tbl\n" if($CONF{'dgr_ok'} eq "yes"); print "
특수문자$chr_tbl\n"; print "링크파일$link_file" if($link_value ne ""); my($submit_btn) = &Input("submit","","수정하기"); my($reset_btn) = &Input("reset", "", "다시작성"); print "$submit_btn $reset_btn\n"; &Tfoot; &Ffoot; print "\"글

\n"; &foot; } sub admin_modify_form { my($pass) = crypt($FORM{'passwd'},"sp"); if($CONF{'admin_pwd'} ne $pass) { &error("pass"); } my(@data, @notice, @auto, $html, $link_val, $br_val, $subject, $comment, $wdate, $read_num, $htmlvalue); open(DATA,"$main_dir/notice.cgi"); @data = ; @notice = split(/\|/,$data[0]); $html=$notice[0]; @auto = split(/\|/,$data[1]); $link_val = ($auto[0] eq "1") ? "checked" : ""; $br_val = ($auto[1] eq "1") ? "checked" : ""; $subject = $notice[1]; $comment = $notice[2]; $comment =~ s/
/\n/g; $comment =~ s/&/&/g; $comment =~ s//>/g; $wdate = $notice[3]; my ($die_year, $die_mon, $die_day) = split(/:/,$notice[4]); $read_num = $notice[5]; $htmlvalue = ($html eq "1") ? "checked" : ""; close (DATA); my($year_val, $mon_val, $day_val, $sub_val, $html_chk, $auto_link, $auto_br, $text_val, $ok_btn, $reset_btn); $year_val = &Input("text", "die_year", "$die_year","","","4","4"); $mon_val = &Input("text", "die_mon", "$die_mon", "","","2","2"); $day_val = &Input("text", "die_day", "$die_day", "","","2","2"); $sub_val = &Input("text", "subject", "$subject", "", "", "70", ""); $html_chk = &Checkbox("html", "1" , "$htmlvalue"); $auto_link = &Checkbox("auto_link", "1", "$link_val"); $auto_br = &Checkbox("auto_br", "1", "$br_val"); $text_val = &Textarea("70","8","comments","","","$comment"); $ok_btn = &Input("submit", "", " 글 올림 "); $reset_btn = &Input("reset", "", "다시 작성"); &head; &Fhead("POST", "$cgi_url","","form"); print &Input("hidden", "action", "adminwrite"); print &Input("hidden","read_num","$read_num"); print &Input("hidden","id","$FORM{'id'}"); &Thead("","$CONF{'head_color'}","3","0"); print "ⓝ 공지사항 수정하기...\n"; print "\n"; &Thead("", "$CONF{'head_color'}", "3", "3"); print "\n"; print "만 기 일 $year_val년\n"; print "$mon_val월 $day_val일 (예: 2000년08월01일)\n"; print "내용옵션$html_chkhtml허용 $auto_link자동링크 $auto_br자동줄바꿈\n"; print "제      목$sub_val\n"; print " $text_val\n"; &call_dgr; print "
동 글 이$dongury_tbl\n" if($CONF{'dgr_ok'} eq "yes"); print "
특수문자$chr_tbl\n"; &ok_admin; print "$ok_btn $reset_btn\n"; &Tfoot; &Ffoot; print "\"글

\n"; &foot; } sub call_dgr{ if($CONF{'dgr_ok'} eq "yes"){ my %DGR = ( 'dong1' => '캬~', 'dong2' => '숯댕이~', 'dong3' => '이씨~', 'dong4' => '두통~', 'dong5' => '엉엉~', 'dong6' => '냠냠~', 'dong7' => '세원~', 'dong8' => '경림~', 'dong9' => '쌈박질~', 'dong10' => '에~', 'dong11' => '메롱~', 'dong12' => '감기~', 'dong13' => '움~', 'dong14' => '흠~', 'dong15' => '행복~', 'dong16' => '신사~', 'dong17' => '간호사~', 'dong18' => '의사~', 'dong19' => '쿨쿨~', 'dong20' => '궁금~', 'dong21' => '방긋~', 'dong22' => '미소~', 'dong23' => '욱~', 'dong24' => '이런~', 'dong25' => '뺑코~', 'dong26' => '뜨악~', 'dong27' => '졸려~', 'dong28' => '사랑~', 'dong29' => '이히~', 'dong30' => '끄아악~', 'dong31' => '스마일~', 'dong32' => '헤~', 'dong33' => '멋쟁이~', 'dong34' => '군인~', 'dong35' => '괴물~', 'dong36' => '맛있당~', 'dong37' => '잉~', 'dong38' => '부들~', 'dong39' => '우~', 'dong40' => '하하~', 'dong41' => '부상~', 'dong42' => '마름~', # 'dong43' => '투덜~', # 'dong44' => '의심~', # 'dong45' => '왕따~', # 'dong46' => '와우~', # 'dong47' => '엥~', # 'dong48' => '안경~', # 'dong49' => '모자1~', # 'dong50' => '모자2~', # 'dong51' => '옹~', # 'dong52' => '깔깔~', # 'dong53' => '흥~', # 'dong54' => '에휴~', # 'dong55' => '화남~', # 'dong56' => '흐미~', # 'dong57' => '훌쩍~', # 'dong58' => '썬글러스~', ); my $tbl = ""; for(1..42){ $tbl .= "" if(($_-1)%7 == 0); $tbl .= "\n" if(($_-1)%7 == 6); } $tbl .= "
".$DGR{"dong$_"}.""; $tbl .= "
"; $dongury_tbl = $tbl; } my(@chr, $c_tbl, $tbl_cnt); @chr = qw(『 』 【 】 ± × ÷ ∴ ♂ ♀ ≒ ※ ☆ ★ ○ ● ◎ ◇ ◆ □ ■ △ ▲ ▽ ▼ → ← ↑ ↓ ≪ ≫ ∵ ⇒ ⇔ ∑ ∏ ¤ ◁ ◀ ▷ ▶ ♤ ♠ ♡ ♥ ♧ ♣ ⊙ ◈ ▣ ◐ ◑ ▒ ▤ ▥ ▨ ▧ ▦ ▩ ♨ ☏ ☎ ☜ ☞ † ↗ ↙ ↖ ↘ ♩ ♪ ♬ α β); $c_tbl = "\n"; $tbl_cnt = 0; foreach (@chr) { $c_tbl .= "" if($tbl_cnt%37 == 0); $c_tbl .= ""; $c_tbl .= "\n" if($tbl_cnt%37 == 36); $tbl_cnt++; } $c_tbl .= "
$_
\n"; $chr_tbl = $c_tbl; } sub read_cookie{ if($ENV{'HTTP_COOKIE'}) { my @cookies = split(/; /,$ENV{'HTTP_COOKIE'}); foreach(@cookies) { my($name,$value) = split(/=/,$_); $COOKIE{$name} = $value; } } } sub login_head{ &head unless(($act eq "multi_view") && ($FORM{'mv.x'} ne "")); print "

 

 \n"; &Thead("430","$CONF{'cel_color1'}","0","0"); print "\n"; &Thead("100%","$CONF{'head_color'}","0","0"); print "\n"; &Tfoot; &Thead("100%","$CONF{'cel_color1'}","2","0"); } sub login_foot{ &Thead("","","2","0"); print "비밀번호\n"; print &Input("password","passwd","","","","10",""); print "\n"; print &Input("submit",""," 확 인 "); print "\n"; &Tfoot; &Ffoot; print "\n"; &Tfoot; &Thead("100%","$CONF{'head_color'}","0","0"); print "\n"; &Tfoot; print "\n"; &Tfoot; print "

\"글

\n"; print "



\n"; &foot unless(($act eq "multi_view") && ($FORM{'mv.x'} ne "")); } sub open_login { my $subject = $_[0]; &login_head; print "

비공개글 '$subject'(을)를 읽습니다.
비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action", "view"); print &Input("hidden","page", "$FORM{'page'}"); print &Input("hidden","number", "$FORM{'number'}"); print &Input("hidden","simple", "$FORM{'simple'}"); print &Input("hidden","img", "$FORM{'img'}"); print &Input("hidden","category", "$FORM{'category'}"); print &Input("hidden","keyword", "$FORM{'keyword'}"); print &Input("hidden","start_num", "$FORM{'start_num'}"); &login_foot; } sub admin_login { &login_head; print "

관리자 모드로 접속합니다.
비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action", "loginok"); &login_foot; } sub admin_chkdel { my(@del_num); &login_head; print "

체크된 항목을 삭제합니다.
관리자 비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.\n"; &Fhead("POST","$cgi_url"); my $cnt = 0; for (0..$CONF{'page_num'}-1){ my($chk_num) = "num_val$_"; if($FORM{$chk_num}){ $del_num[$cnt] = "$FORM{$chk_num}"; print &Input("hidden","$chk_num","$del_num[$cnt]"); $cnt++; } } print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action", "multi_del"); print &Input("hidden","page","$page"); print &Input("hidden","total_val","$FORM{'total_val'}"); print &Input("hidden","category","$FORM{'category'}"); print &Input("hidden","keyword","$FORM{'keyword'}"); print &Input("hidden","start_num","$FORM{'start_num'}"); &login_foot; } sub admin_ok { &login_head; print "

공지사항을 수정합니다.
비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.
\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action", "admin_modify_form"); &login_foot; } sub etc_del { &login_head; print "

간단의견을 삭제합니다.
관리자 비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.
\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","page","$page"); print &Input("hidden","img","$FORM{'img'}"); print &Input("hidden","number","$FORM{'number'}"); print &Input("hidden","sun","$FORM{'sun'}"); if($FORM{'category'} ne ""){ print &Input("hidden","category","$FORM{'category'}"); print &Input("hidden","keyword","$FORM{'keyword'}"); } print &Input("hidden","action", "delete_etc"); &login_foot; } sub admin_remove { &login_head; print "

공지사항을 삭제합니다.
비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.
\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action", "admin_remove_ok"); &login_foot; } sub etcall_del{ &login_head; print "

간단의견을 삭제합니다.
비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.
\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action", "etcdel_ok"); print &Input("hidden","number","$FORM{'num'}"); print &Input("hidden","page", "$FORM{'page'}"); &login_foot; } sub modify{ &login_head; print "

글을 수정합니다.
비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.
\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action", "passok"); print &Input("hidden","page","$page"); print &Input("hidden","number", "$FORM{'number'}"); print &Input("hidden","simple","$FORM{'simple'}"); &login_foot; } sub passok{ my(@filea, $pass); $pass = crypt($FORM{'passwd'},"sp"); open(FILE,"$main_dir/data/$FORM{'number'}"); chomp(@filea = ); close (FILE); if($FORM{'passwd'} eq ""){ &error("pass"); }elsif(($filea[0] eq $pass) || ($CONF{'admin_pwd'} eq $pass)) { &modify_form; }else{ &error("pass"); } } sub write { if(($FORM{'name'} eq "") || ($FORM{'comments'} eq "")||($FORM{'subject'} eq "")){ &error; } print "Set-Cookie: UN=$FORM{'name'}; expires=Sunday, 12-Dec-2002 12:12:12 GMT;\r\n"; print "Set-Cookie: UM=$FORM{'email'}; expires=Sunday, 12-Dec-2002 12:12:12 GMT;\r\n"; print "Set-Cookie: UH=$FORM{'homepage'}; expires=Sunday, 12-Dec-2002 12:12:12 GMT;\r\n"; my($pass) = crypt($FORM{'passwd'},"sp"); if(($CONF{'admin_only'} eq "yes") && ($CONF{'admin_pwd'} ne $pass)){ &error("admin"); } unless(($FORM{'email'} eq "") || ($FORM{'email'} =~ /.*\@.*\..*/)){ &error("email"); } my @not_tag = qw(name email homepage subject pre_view link_file); for (@not_tag) { $FORM{$_} =~ s/<([^>]|\n)*>//g; } #----------------------------- 동글이 많이 쓸시 에러메세지 보내기... ^^ if($CONF{'dgr_ok'} eq "yes"){ my $chk_cnt = 0; while($FORM{'comments'} =~ /[\xA1-\xFE][^~]~/g){ $chk_cnt++; } &error("dgr") if($chk_cnt > 50); } #------------------------------------------------------------------- #$FORM{'comments'} =~ s/&/&amp;/g; $FORM{'comments'} =~ s/
/<br>/g; $FORM{'comments'} =~ s/\r\n/
/g; &com124('name', 'email', 'homepage', 'subject', 'comments', 'pre_view', 'link_file'); ####################################################### my(@sub_data, @num, $num, $home); if($FORM{'subnumber'} eq "") { &read_idx; @num_data = split(/\./,$ary[0]); $num = $num_data[0] || "1"; while(-e "$main_dir/data/$num.cgi"){ $num++; } } else{ while(-e "$main_dir/data/$FORM{'subnumber'}.cgi"){ @sub_data = split(/-/,"$FORM{'subnumber'}"); $sub_data[$#sub_data]++; $FORM{'subnumber'} = join("-",@sub_data); } } ####################################################### $home = (($FORM{'homepage'} ne "") && ($FORM{'homepage'} ne "http://")) ? "$FORM{'homepage'}" : ""; &get_date; &word_chk("$FORM{'name'} $FORM{'subject'} $FORM{'comments'}"); #나쁜단어 체킹 #=================================================================================== #도배방지 쿠키적용 같은제목 같은내용의 글을 올릴시에 도배인정 ^.^. my ($time_val, $date_val, $chk_time, $chk_data, @chk, $r_ip, $r_date, $r_time); &read_cookie; if($COOKIE{'DOBAE'} eq "$ENV{'REMOTE_ADDR'}$FORM{'subject'}$FORM{'comments'}"){ &error("dobae"); } print "Set-Cookie: DOBAE=$ENV{'REMOTE_ADDR'}$FORM{'subject'}$FORM{'comments'};\r\n"; #윽! 쿠키설정해재시 도배방지키 위하여 T.T local $cook_time = 20; $chk_time = $hour*360 + $min*60 + $sec; open(IP_TIME, "$main_dir/time_chk.cgi"); $chk_data = ; close(IP_TIME); chomp(@chk = split(/\|/, $chk_data)); $r_ip = $chk[0]; $r_date = $chk[1]; $r_time = $chk[2]; $date_val = "$year-$mon-$mday"; $time_val = $hour*360 + $min*60 + $sec + $cook_time; open(TIME_CHK, ">$main_dir/time_chk.cgi"); print TIME_CHK "$ENV{'REMOTE_ADDR'}|$date_val|$time_val"; close(TIME_CHK); #if(($r_ip eq "$ENV{'REMOTE_ADDR'}") && ($r_date eq "$date_val") && ($r_time >= $chk_time)) { # &error("time_chk"); #} #=================================================================================== local($org_name, $size); if($FORM{'file_name'} ne ""){ if($FORM{'link_file'} eq ""){ &upload_file; } else{ &error("double"); } } elsif($FORM{'link_file'} ne ""){ unless(($FORM{'link_file'} =~ /^http:\/\//) || ($FORM{'link_file'}=~ /^ftp:\/\//)) { &error("link"); } } my(@est, @mail, @adata, @filea, $count); if($FORM{'subnumber'} eq "") { &lock; open(WFILE,">$main_dir/data/$num.cgi"); print WFILE "$pass\n"; print WFILE "$FORM{'name'}|$FORM{'email'}|$home|$FORM{'subject'}|$date||\n"; print WFILE "$FORM{'html'}|$FORM{'comments'}\n"; print WFILE "|||||\n"; print WFILE "$FORM{'auto_link'}|$FORM{'auto_br'}|$FORM{'open'}|\n"; print WFILE "|$FORM{'ip'}|$FORM{'domain'}|$FORM{'pre_view'}|$FORM{'link_file'}|$org_name|$size|\n"; close(WFILE); &unlock; &index_plus("$num.cgi"); } else { open(Sum,"$main_dir/data/$FORM{'num'}"); chomp(@est = ); close(Sum); @mail = split(/\|/,$est[1]); local $addr = $mail[1]; open(NUM,"$main_dir/num/$FORM{'num'}"); chomp(@num = ); close(NUM); @ans_data = split(/\|/,$num[0]); $ans_data[0]++; open(Suma,">$main_dir/num/$FORM{'num'}"); print Suma join("|",@ans_data); close(Suma); &lock; open(WFILE,">$main_dir/data/$FORM{'subnumber'}.cgi"); print WFILE "$pass\n"; print WFILE "$FORM{'name'}|$FORM{'email'}|$home|$FORM{'subject'}|$date||\n"; print WFILE "$FORM{'html'}|$FORM{'comments'}\n"; print WFILE "0\n"; print WFILE "$FORM{'auto_link'}|$FORM{'auto_br'}|$FORM{'open'}|\n"; print WFILE "|$FORM{'ip'}|$FORM{'domain'}|$FORM{'pre_view'}|$FORM{'link_file'}|$org_name|$size|\n"; close(WFILE); &unlock; &index_plus("$FORM{'subnumber'}.cgi"); if(($addr) && ($CONF{'sendmail_ok'} == "yes") && ($FORM{'mail_notice'} ne "1")) { &sendmail if($NT ne "1"); } if(($addr) && ($FORM{'mail_notice'} eq "1")){ &mail_notice if($NT ne "1"); } } my $num_data = ($FORM{'subnumber'} ne "") ? "$FORM{'subnumber'}.cgi" : "$num.cgi"; &send_gul("$CONF{'admin_mail'}", "$num_data") if(($CONF{'admin_sender'} eq "yes") && ($NT ne "1")); &load_page; } sub word_chk { my ($chk_word, @bad_list); local $bad_word; $chk_word = shift; open(BAD_WORD, "$id_dir/bad_word.cgi"); chomp(@bad_list = ); close(BAD_WORD); shift(@bad_list); foreach (@bad_list) { if($chk_word =~ /$_/i) { $bad_word = $_; &error("bad_word"); } } } sub read_idx{ open(INDEX, "$main_dir/idx/index.cgi"); chomp(@ary = ); close(INDEX); if($ary[0] eq ""){ mkdir("$main_dir/idx",0777); &make_idx; } } sub index_plus{ my(@idx_list, $plus_num, $cnt, $list, $start, $num_data); $plus_num = "$_[0]"; open(IDX_DATA,"$main_dir/idx/index.cgi"); chomp(@idx_list = ); close(IDX_DATA); unshift(@idx_list,$plus_num); #------------------------------------ 쓴글 넘버 배열에 추가... ^.^ $cnt = 0; foreach $list(@idx_list) { $list =~ s/.cgi//g; $idx[$cnt] = $list; $cnt++; } @idx = sort {($b <=> $a) || ($a cmp $b)}(@idx); $num_data = $#idx_list+1; if($num_data > $CONF{'max_data'}){ #최대 데이타량 초과시 파일 삭제... ^^ while($num_data > $CONF{'max_data'}){ open(DEL,"$main_dir/data/$idx[$#idx_list].cgi"); my @del = ; close(DEL); my @del_file = split(/\|/,$del[5]); unlink("$main_dir/files/$del_file[5]"); unlink("$main_dir/data/$idx[$#idx].cgi"); unlink("$main_dir/num/$idx[$#idx].cgi"); unlink("$main_dir/etc/$idx[$#idx].cgi"); pop(@idx); $num_data--; } } &lock; open(DATA, ">$main_dir/idx/index.cgi"); print DATA join(".cgi\n",@idx).".cgi"; close(DATA); for(1..10){ open(PAGE,">$main_dir/idx/$_.cgi"); $start = ($_ - 1)*$CONF{'page_num'}; for(0..$CONF{'page_num'}-1){ last if($idx[$start+$_] eq ""); print PAGE "$idx[$start+$_].cgi\n"; } close(PAGE); } open(NUM,">$main_dir/idx/num.cgi"); print NUM $num_data; close(NUM); &unlock; } sub make_idx{ my(@num_data, @ary, $list_data, $cnt); #---------------------------인덱스 생성 ( 전체 페이지)------------------------ opendir(DIR, "$main_dir/data"); @num_data = grep(!/^\.{1,2}$/, readdir(DIR)); #데이타를 번호순으로 정렬... ^.^ closedir(DIR); $cnt = 0; foreach $list_data(@num_data) { $list_data =~ s/.cgi//g; $ary[$cnt] = $list_data; $cnt++; } @ary = sort {($b <=> $a) || ($a cmp $b)} @ary; &lock; open (INDEX, ">$main_dir/idx/index.cgi"); print INDEX join(".cgi\n",@ary).".cgi" if($ary[0] ne ""); close(INDEX); &unlock; #---------------------------인덱스 생성 끝 --------------------------------------------------- } sub upload_file { my(@a, @b, @fname_chk, $upfile, $t, $filename); $upfile = $FORM{'file_name'}; chop($upfile); chop($upfile); @a = split(/\"/,$real_file); @b = split(/\\/,$a[3]); $t = @b; $org_name = ($b[$t-1]); $org_name =~ tr/ /_/; #파일에 빈칸이 존재시.... $filename = "$main_dir/files/".$org_name; @fname_chk = split(/\./,$org_name); if(($NT && (($fname_chk[$#file_chk] eq "cgi") || ($fname_chk[$#file_chk] eq "pl") || ($fname_chk[$#file_chk] eq "asp") || $fname_chk[$#file_chk] =~ "php")) || ($fname_chk[$#file_chk] =~ "php")){ $filename .= ".txt"; $org_name .= ".txt"; } if(-e $filename){ &error("exist"); } open(FILE, ">$filename"); binmode FILE; print FILE $upfile; close FILE; $size = (-s "$main_dir/files/$org_name"); if($size > ($CONF{'max_size'}*1048576)){ unlink("$main_dir/files/$org_name"); &error("size"); } if($size >= 1048576) { $size = substr(($size/1048576),0,3); @dot=split(/\./,$size); $size = $dot[1] ? "$size MB" : "$dot[0] MB"; } elsif($size >= 1024) { $size = substr(($size/1024),0,3); @dot=split(/\./,$size); $size = $dot[1] ? "$size KB" : "$dot[0] KB"; } else{ $size = "$size byte"; } } sub modify_ok { my $pass = crypt($FORM{'passwd'},"sp"); if(($FORM{'org_passwd'} ne $pass) && ($CONF{'admin_pwd'} ne $pass)) { &error("pass"); } if(($FORM{'name'} eq "") || ($FORM{'comments'} eq "")|| ($FORM{'subject'} eq "")) { &error; } my(@not_tag, $mod_date); @not_tag = qw(name email homepage subject pre_view link_file); for (@not_tag) { $FORM{$_} =~ s/<([^>]|\n)*>//g; } # $FORM{'comments'} =~ s/&/&/g; $FORM{'comments'} =~ s/
/<br>/g; $FORM{'comments'} =~ s/\r\n/
/g; &com124('name', 'email', 'homepage', 'subject', 'comments', 'pre_view', 'link_file'); &word_chk("$FORM{'name'} $FORM{'subject'} $FORM{'comments'}"); #나쁜단어 체킹 &get_date; $mod_date = $date; &lock; open(WFILE,">$main_dir/data/$FORM{'number'}"); print WFILE "$FORM{'org_passwd'}\n"; print WFILE "$FORM{'name'}|$FORM{'email'}|$FORM{'homepage'}|$FORM{'subject'}|$FORM{'date'}|$mod_date|\n"; print WFILE "$FORM{'html'}|$FORM{'comments'}\n"; print WFILE "$FORM{'ansnum'}\n"; print WFILE "$FORM{'auto_link'}|$FORM{'auto_br'}|$FORM{'open'}||\n"; print WFILE "|$FORM{'ip'}|$FORM{'domain'}|$FORM{'pre_view'}|$FORM{'link_file'}|$FORM{'file_name'}|$FORM{'file_size'}|$FORM{'down_num'}|\n"; close(WFILE); &unlock; &load_page; } sub adminwrite { my($pass) = crypt($FORM{'passwd'},"sp"); if($CONF{'admin_pwd'} eq "$pass"){ if(($FORM{'die_year'} ne "") && ($FORM{'die_mon'} ne "") && ($FORM{'die_day'} ne "")){ if(($FORM{'subject'} ne "") && ($FORM{'comments'} ne "")) { $FORM{'subject'} =~ s/<([^>]|\n)*>//g; # $FORM{'comments'} =~ s/&/&/g; $FORM{'comments'} =~ s/
/<br>/g; $FORM{'comments'} =~ s/\r\n/
/g; &com124('subject', 'comments', 'die_year', 'die_mon', 'die_day'); open (NOTICE, "$main_dir/notice.cgi"); $notice_data = ; close (NOTICE); if(($notice_data ne "") && ($FORM{'read_num'} eq "")){ unlink("$main_dir/notice.cgi"); unlink("$main_dir/num/notice.cgi"); unlink("$main_dir/etc/notice.cgi"); } &get_date; open(WFILE,">$main_dir/notice.cgi"); print WFILE "$FORM{'html'}|$FORM{'subject'}|$FORM{'comments'}|$date|$FORM{'die_year'}:$FORM{'die_mon'}:$FORM{'die_day'}|\n"; print WFILE "$FORM{'auto_link'}|$FORM{'auto_br'}|\n"; close(WFILE); &load_page; } else{ &error("notice"); } } else{ &error("date"); } } else{ &error("ok_admin"); } } sub reply_form { my(@repl, @repla, @seper, @arp, $tomail, $html_val, $alink, $abr, $open_ok, $open_val, $link_val, $br_val, $scut, $ford); &read_cookie; &head; open(REPLY, "$main_dir/data/$FORM{'number'}"); @repl = ; close(REPLY); @repla = split(/\|/, $repl[1]); $tomail = "$repla[1]"; @seper = split(/\|/, $repl[2]); $seper[1] =~ s/
/\nː/g; # $seper[1] =~ s/\nː


/\n
/g; $seper[1] =~ s/&/&/g; $seper[1] =~ s/<br>/
/g; $seper[1] =~ s/&/&/g; $seper[1] =~ s//>/g; chomp($seper[1]); $repla[3] =~ s/\"/ /g; $html_val = ($seper[0] eq "1") ? "checked" : ""; @auto = split(/\|/,$repl[4]); $alink = $auto[0]; $abr = $auto[1]; $open_ok = $auto[2]; if($open_ok eq "no"){ $open_val = &Input("hidden","open","no");; } else{ $open_val = "" if($CONF{'scr_opt'} eq "yes"); } $link_val = ($alink eq "1") ? "checked" : ""; $br_val = ($abr eq "1") ? "checked" : ""; @arp = split(/-/,$FORM{'number'}); $scut = @arp; if($scut > 0) { $ford = "☞ ";} if($CONF{'admin_only'} eq "yes"){ print "

[알림!!!] 이 게시판은 현재 관리자만 글을 쓸수 있게 설정되었습니다.\n"; } my($name, $email, $home_val, $password, $html_chk, $auto_link, $auto_br, $subject, $preview, $mail_notiece, $comment, $upfile, $linkfile, $sub_btn, $reset_btn); $name = &Input("text","name","$COOKIE{'UN'}","","","14","30"); $email = &Input("text","email","$COOKIE{'UM'}","","","26",""); $home_val = $COOKIE{'UH'} ? "$COOKIE{'UH'}" : "http:\/\/"; $password = &Input("password","passwd","","","","10",""); $html_chk = &Checkbox("html", "1", "$html_val"); $auto_link = &Checkbox("auto_link", "1", "$link_val"); $auto_br = &Checkbox("auto_br", "1", "$br_val"); $subject = &Input("text", "subject","$ford$repla[3]","","","70",""); $preview = &Input("text", "pre_view","http:\/\/","","","70",""); $mail_notice = &Checkbox("mail_notice","1","checked"); $comment = &Textarea("70","8","comments","","","ː[$repla[0]님께서 남긴 내용]\nː$seper[1]\n\n"); $upfile = &Input("file","file_name","","","","54",""); $linkfile = &Input("text", "link_file","","","","54",""); $sub_btn = &Input("submit",""," 글 올림 "); $reset_btn = &Input("reset","","다시적기 "); &input_java; # &Fhead("POST","$cgi_url","multipart/form-data","form"); print ""; print &Input("hidden","subnumber","$FORM{'subnumber'}"); print &Input("hidden","action","write"); print &Input("hidden","num","$FORM{'number'}"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","page","$page"); print &Input("hidden","ip","$ENV{'REMOTE_ADDR'}"); print &Input("hidden","domain","$ENV{'HTTP_USER_AGENT'}"); &Thead("","$CONF{'head_color'}","3",""); print "ⓝ $repla[0]님께서 남기신 글에대한 답변 작성\n"; print "\n"; &Thead("","$CONF{'head_color'}","2","2"); print "이      름$name\n"; print "   e-mail $email\n"; print "홈페이지\n"; print &Input("text","homepage","$home_val","","","51",""); print "\n"; print "비밀번호$password $html_chkhtml허용 $auto_link자동링크 $auto_br자동줄바꿈     $open_val\n"; print "제      목$subject\n"; print "미리보기$preview\n" if($CONF{'pds_ok'} eq "yes"); print " $mail_notice 답변글 메일로 보내기\n" if(($tomail ne "") && ($NT ne "1")); print "
내      용$comment\n"; &call_dgr; print "
동 글 이$dongury_tbl\n" if($CONF{'dgr_ok'} eq "yes"); print "
특수문자$chr_tbl\n"; print "파일첨부$upfile\n" if($CONF{'pds_ok'} eq "yes"); print "링크파일$linkfile [ 최대 $CONF{'max_size'} MB ]\n" if($CONF{'pds_ok'} eq "yes"); print "$sub_btn $reset_btn\n"; &Tfoot; print "\n"; &Tfoot; &Ffoot; print "\"글

\n"; &foot; } sub get_date { @week = qw(일 월 화 수 목 금 토); ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime)[0,1,2,3,4,5,6]; $mon++; $year += 1900; $date = sprintf("%04d/%02d/%02d [%02d:%02d]", $year,$mon, $mday, $hour, $min); $week_val = "$week[$wday]"; } sub load_page{ &head; if($FORM{'simple'} eq "yes"){ my $want_link = ($act eq "modify_ok") ? "$cgi_url?id=$FORM{'id'}&action=view&number=$FORM{'number'}&simple=yes" : "$cgi_url?id=$FORM{'id'}&action=simple_ok"; $want_link = "$cgi_url?id=$FORM{'id'}&action=simple_ok&kind=send" if($send_end); print "\n"; } else{ my $ttv = "&total_val=$FORM{'total_val'}" if("$FORM{'total_val'}"); my $shr_val = "&action=search&category=$FORM{'category'}&keyword=$FORM{'keyword'}&start_num=$FORM{'start_num'}" if("$FORM{'category'}"); print "\n"; } print "

 

 

 


\n"; print "Loading ......\n"; print "
\n"; print "

◀◀ 게시판으로 돌아가기

\n" if($FORM{'simple'} ne "yes"); &foot; } sub simple_ok{ &head; print "

\n"; &Thead("","","0","0",); print "\n"; my($msg) = ($FORM{'kind'} eq "send") ? "충성! 배달 완료 하였습니다!" : "삭제를 완료했구먼유~"; print "$msg\n"; print "



\n"; &Tfoot; print "

\n"; &foot; } sub search { if($FORM{'keyword'} eq ""){ &error("keyword"); } my(@gul_data, @line1, @line2, @line3, @search_list, $search_data, $category, $resent_num, $last_num); local(@ary, $down_col, $pnt_col, $all_list, $cou, $list_num, $total_page); if($CONF{'down_view'} eq "yes"){ $down_col="다운"; } if($CONF{'point_ok'} eq "yes"){ $pnt_col="추천"; } &read_idx; $all_list = @ary; $cou = 0; $start_num = $FORM{'start_num'} ? "$FORM{'start_num'}" : "0"; $end_num = $start_num + $CONF{'find_interval'} - 1; if($start_num > $all_list){ &head; print "





\n"; print "$all_list개의 모든글을 검색하였습니다...

검색할 데이타가 이제 더이상 없습니다....



"; print "
\"글목록
\n"; print "



\n"; &foot; } for($start_num..$end_num){ last if($ary[$_] eq ""); open(LIST, "$main_dir/data/$ary[$_]"); @gul_data = ; @line1 = split(/\|/, $gul_data[1]); @line2 = split(/\|/, $gul_data[2]); @line3 = split(/\|/, $gul_data[5]); close (LIST); if($FORM{'category'} eq "sub_cmt"){ $search_data = $line1[3]." ". $line2[1]; } else{ if($FORM{'category'} eq "name") { $search_data =$line1[0]; #이름검색 } elsif($FORM{'category'} eq "subject") { $search_data=$line1[3]; #제목검색 } elsif($FORM{'category'} eq "comment") { $search_data =$line2[1]; #내용검색 } elsif($FORM{'category'} eq "ip") { $search_data = $line3[1]; } } if($search_data =~ /$FORM{'keyword'}/io) { $search_list[$cou] = $ary[$_]; $cou++; } } #--------------------------------------------------------------------------------------------------- @ary = undef; @ary = @search_list; $total_page = int($cou/$CONF{'page_num'}); if(($total_page*$CONF{'page_num'}) < $cou) {$total_page += 1; } $page = $total_page if("$FORM{'total_val'}"); $total_page = 1 if($total_page == 0); &head; $list_num = @ary; if(@quick_id){ &quick_btn; } else{ print "
검색어 $FORM{'keyword'}    검색결과 $cou개
\n"; } &print_list; $resent_num = $start_num + 1; $last_num= $end_num + 1; print "
\"글목록
\n"; print "

최근 $resent_num개부터 $last_num개까지의 게시물에서 위와같은 데이타가 검색되었습니다.
다음 $CONF{'find_interval'}개의 게시물에서 찿기 원하시면 아래 'search'버튼을 눌러주세요.
" if($all_list > $CONF{'find_interval'}); &find if($CONF{'search_ok'} eq "yes"); &foot; } #--------- | 문자 제거 함수... ^.^ sub com124{ my @com_list = @_; foreach $list(@com_list){ $FORM{$list} =~ s/\|/|/g; } } sub find { my($start_num, $sc_val, $sub_val, $name_val, $com_val, $ip_val, $keywd); $start_num = $FORM{'start_num'} + $CONF{'find_interval'} if($FORM{'start_num'} ne ""); $start_num = 0 if($FORM{'start_num'} eq ""); if($all_list > $CONF{'find_interval'}){ if($FORM{'category'} eq "sub_cmt"){ $sc_val = "selected"; } elsif($FORM{'category'} eq "subject"){ $sub_val = "selected"; } elsif($FORM{'category'} eq "name"){ $name_val = "selected"; } elsif($FORM{'category'} eq "comment"){ $com_val = "selected"; } elsif($FORM{'category'} eq "ip"){ $ip_val = "selected"; } $keywd = "$FORM{'keyword'}"; } &Fhead("POST","$cgi_url"); &Thead("","","2","0"); print "\n"; print "\n" if(($all_list > $CONF{'find_interval'}) || ($list_num > $CONF{'find_interval'})); print "\n"; print "\n"; print "\n"; print "\n"; &Tfoot; &Ffoot; } sub quick_btn{ print "\n"; &Thead("100%","","2","0"); if($act ne "search"){ print "\n"; } else{ print " \n"; print "검색어 $FORM{'keyword'}    검색결과 $cou개\n"; print "\n"; } print "
\n"; print "\n"; &Tfoot; } sub top_btn{ my($kind, $total_data, $search_val, $prev_img, $next_img, $prev_link, $next_link); $kind = $_[0]; $total_data = $FORM{'category'} ? "$cou" : "$list_num"; $search_val = $FORM{'category'} ? "&action=search&category=$FORM{'category'}&keyword=$FORM{'keyword'}&start_num=$FORM{'start_num'}" : ""; $prev_img = "\"이전"; $next_img = "\"다음"; $prev_link = ($page eq "1") ? "$prev_img" : "$prev_img"; $next_link = ($page eq "$total_page") ? "$next_img" : "$next_img"; #---------------------------- 글쓰기, 이전 페이지, 다음페이지 나오는 곳... &Thead("100%","","1","0"); print "\"글Total $total_dataarticles [ $page/$total_page page ]$prev_link$next_link\n"; &Tfoot; &Thead("100%","$CONF{'head_color'}","0","0"); print "\n"; &Tfoot; } sub erase { &login_head; print "

비밀번호를 적어 주시고 확인 버튼을 눌러 주세요.

\n"; print "
  • 글 $FORM{'subject'}를 삭제합니다.\n"; print "
  • 이글의 답변 글까지 모두 삭제됩니다
\n"; &Fhead("POST","$cgi_url"); print &Input("hidden", "action", "eraseok"); print &Input("hidden", "page","$FORM{'page'}"); print &Input("hidden", "id","$FORM{'id'}"); print &Input("hidden", "number","$FORM{'number'}"); print &Input("hidden", "simple","$FORM{'simple'}"); &login_foot; } sub eraseok { if($FORM{'passwd'} eq "") { &error("pass"); } my(@filea, @seper, @num_data, @ans_data, $pass, $ans_num, $num); $pass = crypt($FORM{'passwd'},"sp"); open(FILE,"$main_dir/data/$FORM{'number'}"); @filea = ; @seper = split(/\|/,$filea[5]); close (FILE); unlink ("$main_dir/files/$seper[5]"); chop($filea[0]); open(FILE,"$main_dir/num/$FORM{'number'}"); @num_data = ; @ans_data = split(/\|/,$num_data[0]); close (FILE); $ans_num = $ans_data[0]; if(($filea[0] eq $pass) || ($CONF{'admin_pwd'} eq $pass)) { $num = "$FORM{'number'}"; &lock; if($ans_num > 0) { &auto_erase("$num"); } unlink("$main_dir/data/$num"); unlink ("$main_dir/num/$num"); unlink ("$main_dir/etc/$num"); #-------------------------------------------- 삭제시 인덱스 빼기... my(@idx_list, @data_list, $list, $k, $num_data, $start); open(INDEX, "$main_dir/idx/index.cgi"); @idx_list = ; close(INDEX); chomp(@idx_list); open(DATA, ">$main_dir/idx/index.cgi"); $k = 0; foreach $list(@idx_list) { if($list ne "$FORM{'number'}"){ print DATA "$list\n"; $data_list[$k] = $list; $k++; } } close(DATA); #------------------------------------------------ $num_data = $#data_list+1; open(NUM,">$main_dir/idx/num.cgi"); print NUM $num_data; close(NUM); #------------------------- 페이지별 인덱스 정리 for(1..10){ open(PAGE,">$main_dir/idx/$_.cgi"); $start = ($_ - 1)*$CONF{'page_num'}; for(0..$CONF{'page_num'}-1){ print PAGE "$data_list[$start+$_]\n"; } close(PAGE); } &unlock; #----------------------------------------- &load_page; } else { &error("pass"); } } sub admin_remove_ok { my($pass) = crypt($FORM{'passwd'},"sp"); if($CONF{'admin_pwd'} ne $pass) { &error("pass"); } unlink("$main_dir/notice.cgi"); unlink("$main_dir/num/notice.cgi"); unlink("$main_dir/etc/notice.cgi"); &load_page; } sub etcdel_ok{ my($pass) = crypt($FORM{'passwd'},"sp"); if($CONF{'admin_pwd'} ne $pass) { &error("pass"); } unlink("$main_dir/etc/$FORM{'number'}"); if($FORM{'number'} eq "notice.cgi"){ &view_notice; } else{ &view; } } sub delete_etc{ my($pass) = crypt($FORM{'passwd'},"sp"); if($CONF{'admin_pwd'} ne $pass) { &error("pass"); } my(@etc_data, $cnt, $search_opt, $goto_url); open(ETC, "$main_dir/etc/$FORM{'number'}"); @etc_data = ; close(ETC); $cnt = 0; open(WRITE, ">$main_dir/etc/$FORM{'number'}"); for(0..$#etc_data){ print WRITE "$etc_data[$_]" unless($cnt eq "$FORM{'sun'}"); $cnt++; } close(WRITE); if($FORM{'number'} ne "notice.cgi"){ $search_opt = $FORM{'category'} ? "&category=$FORM{'category'}&keyword=$FORM{'keyword'}" : ""; $goto_url = "$cgi_url?id=$FORM{'id'}&page=$FORM{'page'}&action=view&number=$FORM{'number'}&cnt=no&img=$FORM{'img'}$search_opt"; } else{ $goto_url = "$cgi_url?id=$FORM{'id'}&action=view_notice&cnt=no"; } &head; print "\n"; print "

 

 

 


\n"; print "Loading ......\n"; print "
\n"; print "

◀◀ 게시판으로 돌아가기

\n" if($FORM{'simple'} ne "yes"); &foot; } sub auto_erase{ #관련글 자동 삭제 함수 ^.^ my(@ldata, @file_data, $num, $same_num, $find_same); $num = $_[0]; $num =~ s/.cgi//g; &read_idx; $same_num=length($num)+1; open(DATA, ">$main_dir/idx/index.cgi"); for(0..$#ary){ $find_same=substr($ary[$_],0,$same_num); if("$num-" eq $find_same){ open(FILE,"$main_dir/$ary[$_]"); @ldata = ; @file_data = split(/\|/,$ldata[5]); close (FILE); unlink "$main_dir/data/$ary[$_]"; unlink "$main_dir/num/$ary[$_]"; unlink "$main_dir/etc/$ary[$_]"; } else{ print DATA "$ary[$_]\n"; } } close(DATA); } #=================================== 페이지 이동 함수 ^.^ sub pagemove{ my($search_val) = ($act eq "search") ? "&action=search&category=$FORM{'category'}&keyword=$FORM{'keyword'}&start_num=$FORM{'start_num'}" : ""; my ($interval, $start, $end, $prev, $next, $next_opt); &Thead("","","2","0"); print ""; $interval = 10; $start = (int(($page-1)/$interval))*$interval + 1; $end = $start + $interval -1; if($total_page <= $end){ $end = $total_page; $next_opt = "no" } if($start == 1){ print "[이전]..."; } else{ $prev = $start - 1; print "[First]"; print "[이전]..."; } for($start..$end){ if($page eq $_){ print "[$_]"; } else{ print "[$_]"; } } if($next_opt eq "no"){ print "...[다음]"; } else{ $next = $end + 1; print "...[다음]"; print "[Last]"; } print ""; &Tfoot; } sub loginok { my($pass) = crypt($FORM{'passwd'},"sp"); if($pass eq $CONF{'admin_pwd'}) { &head; print "

 

 \n"; print "관리자 모드로 접속하였습니다.

\n"; print "원하는 항목을 선택하시고 \"LET'S GO!!!\"버튼을 눌러주세요!\n"; &Fhead("POST", "$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","passwd","$pass"); print "\n"; print &Input("submit","","LET'S GO!!!"); &Ffoot; print "

 

 \n"; &foot; } else { &error("pass"); } } sub admin_conf { my($board_left, $board_center, $board_right, $only_yes, $only_no, $ip_yes, $ip_no, $point_yes, $point_no, $etc_yes, $etc_no, $io_yes, $io_no, $pds_yes, $pds_no, $dv_yes, $dv_no, $kv_yes, $kv_no, $smail_yes, $smail_no, $search_yes, $search_no, $speed_yes, $speed_on); if($FORM{'passwd'} eq $CONF{'admin_pwd'}){ if($CONF{'left_right'} eq "left"){ $board_left = "selected"; $board_center = ""; $board_right = ""; } elsif($CONF{'left_right'} eq "center"){ $board_left = ""; $board_center = "selected"; $board_right = ""; } else{ $board_left = ""; $board_center = ""; $board_right = "selected"; } if($CONF{'admin_only'} eq "yes"){ $only_yes = "selected"; $only_no = ""; } else{ $only_yes = ""; $only_no = "selected"; } if($CONF{'view_ip'} eq "yes"){ $ip_yes = "selected"; $ip_no = ""; } else{ $ip_yes = ""; $ip_no = "selected"; } if($CONF{'point_ok'} eq "yes"){ $point_yes = "selected"; $point_no = ""; } else{ $point_yes = ""; $point_no = "selected"; } if($CONF{'etc_ok'} eq "yes"){ $etc_yes = "selected"; $etc_no = ""; } else{ $etc_yes = ""; $etc_no = "selected"; } if($CONF{'dgr_ok'} eq "yes"){ $dgr_yes = "selected"; $dgr_no = ""; } else{ $dgr_yes = ""; $dgr_no = "selected"; } if($CONF{'i_opt'} eq "yes"){ $io_yes = "selected"; $io_no = ""; } else{ $io_yes = ""; $io_no = "selected"; } if($CONF{'scr_opt'} eq "yes"){ $scr_yes = "selected"; $scr_no = ""; } else{ $scr_yes = ""; $scr_no = "selected"; } if($CONF{'pds_ok'} eq "yes"){ $pds_yes = "selected"; $pds_no = ""; } else{ $pds_yes = ""; $pds_no = "selected"; } if($CONF{'down_view'} eq "yes"){ $dv_yes = "selected"; $dv_no = ""; } else{ $dv_yes = ""; $dv_no = "selected"; } if($CONF{'kind_view'} eq "yes"){ $kv_yes = "selected"; $kv_no = ""; } else{ $kv_yes = ""; $kv_no = "selected"; } if($CONF{'sendmail_ok'} eq "yes"){ $smail_yes = "selected"; $smail_no = ""; } else{ $smail_yes = ""; $smail_no = "selected"; } if($CONF{'admin_sender'} eq "yes"){ $asender_yes = "selected"; $asender_no = ""; } else{ $asender_yes = ""; $asender_no = "selected"; } if($CONF{'search_ok'} eq "yes"){ $search_yes = "selected"; $search_no = ""; } else{ $search_yes = ""; $search_no = "selected"; } if($CONF{'speed_up'} eq "no"){ $speed_yes = ""; $speed_no = "selected"; } else{ $speed_yes = "selected"; $speed_no = ""; } my($pass) = &Input("password","admin_pwd","","","","13",""); my($pass_eq) = &Input("password","admin_pwd_eq","","","","13",""); my($msize_val) = &Input("text","max_size","$CONF{'max_size'}","","","10","3"); my($page_val) = &Input("text","page_num","$CONF{'page_num'}","","","10","3"); my($mdata_val) = &Input("text","max_data","$CONF{'max_data'}","","","10"); my($sublen_val) = &Input("text","sub_length","$CONF{'sub_length'}","","","10",""); my($namelen_val) = &Input("text","name_length","$CONF{'name_length'}","","","10",""); my($fontkind_val) = &Input("text","font_kind","$CONF{'font_kind'}","","","10",""); my($fontsize_val) = &Input("text","font_size","$CONF{'font_size'}","","","10",""); my($fontcol_val) = &Input("text","font_color","$CONF{'font_color'}","","","10",""); my($linkcol_val) = &Input("text","link_color","$CONF{'link_color'}","","","10",""); my($width_val) = &Input("text", "tbl_width", "$CONF{'tbl_width'}", "","","10","5"); my($linelen_val) = &Input("text","line_length","$CONF{'line_length'}", "","","10","3"); my($adminname_val) = &Input("text","admin_name","$CONF{'admin_name'}","","","10",""); my($homeurl_val) = &Input("text","home_url","$CONF{'home_url'}","","","40",""); my($adminmail_val) = &Input("text","admin_mail","$CONF{'admin_mail'}","","","20",""); my($bgcol_val) = &Input("text","bgcolor","$CONF{'bgcolor'}", "", "","8",""); my($background_val) = &Input("text","background","$CONF{'background'}","","","25","0"); my($ncel_val) = &Input("text","ncel_color","$CONF{'ncel_color'}","","","10",""); my($hfontcol_val) = &Input("text","hfont_color","$CONF{'hfont_color'}","","","10",""); my($headcol_val) = &Input("text","head_color","$CONF{'head_color'}","","","10",""); my($celcol1_val) = &Input("text","cel_color1","$CONF{'cel_color1'}","","","10",""); my($celcol2_val) = &Input("text","cel_color2","$CONF{'cel_color2'}","","","10",""); my($overcol_val) = &Input("text","over_color","$CONF{'over_color'}","","","10",""); my($selcol_val) = &Input("text","select_color","$CONF{'select_color'}","","","10",""); my($numcol_val) = &Input("text","num_color","$CONF{'num_color'}","","","10",""); my($datecol_val) = &Input("text","date_color","$CONF{'date_color'}","","","10",""); my($readcol_val) = &Input("text","read_color","$CONF{'read_color'}","","","10",""); my($downcol_val) = &Input("text","down_color","$CONF{'down_color'}","","","10",""); my($logoimg_val) = &Input("text","logo_img","$CONF{'logo_img'}","","","42",""); my($txtlogo_val) = &Input("text","logo_txt","$CONF{'logo_txt'}","","","42",""); my($pnt_max) = &Input("text","pnt_cnt","$CONF{'pnt_cnt'}","","","3",""); my($find_interval) = &Input("text","find_interval","$CONF{'find_interval'}","","","4","4"); &head; &Fhead("POST","$cgi_url"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","action","make_conf"); &Thead("500","$CONF{'head_color'}","1","0"); print "환경 설정\n"; print "\n"; &Thead("100%","","1","0"); print "[비밀번호 변경시: 빈칸 그대로 두시면 이전 비밀번호 적용됨]\n"; print "
비밀번호 $pass  다시확인 $pass_eq\n"; #--------------------------- 이미지 스킨 환경설정 부분 -------------------------------------------- &chk_skindir("img"); print "이미지 스킨 \n"; #----------------------------------------------------------------------------------------------- #--------------------------- CGI 스킨 환경설정 부분 -------------------------------------------- &chk_skindir("cgi"); print "CGI 스킨 \n"; #----------------------------------------------------------------------------------------------- print " 게시판 위치정열\n"; print "\n"; print " 관리자만 글쓰기\n"; print "\n"; print " IP정보 보기\n"; print "\n"; print " 간단의견 남기기 사용\n"; print "\n"; print " 비공개 글 남기기 허용\n"; print "\n"; print " 입력폼에서 동글이사용\n"; print "\n"; print " 리스트 화면에서 홈,메일 정보 보이기\n"; print "\n"; print "$pnt_max 명이상 추천시 아이콘 칼라화       추천점수제 사용\n"; print "\n"; print " 자료실로 사용하기\n"; print "\n"; print " 파일타입 보이기\n"; print "\n"; print " 다운수 보이기\n"; print "\n"; print "파일당 올릴수 있는 최대 용량(MB) $msize_val\n"; print "한페이지당 나타날 글 갯수 $page_val\n"; print "데이타 최대 저장 갯수 $mdata_val\n"; print "제목 최대길이 $sublen_val\n"; print "이름 최대길이 $namelen_val\n"; print "기본 글꼴 종류 $fontkind_val\n"; print "기본 글자 크기 $fontsize_val\n"; print "기본 글자 색깔 $fontcol_val\n"; print "링크 글자 색깔 $linkcol_val\n"; print "게시판 넓이 $width_val\n"; # print "쉘간격 $linelen_val\n"; print "관리자 이름 $adminname_val\n"; print "홈페이지 URL $homeurl_val\n"; print "관리자 이메일 주소 $adminmail_val\n"; if($NT ne "1"){ print "글등록시 관리자에게 메일로 남긴글 보내기\n"; print "\n"; print "답변등록시 글쓴이에게 메일로 답변글 보내기\n"; print "\n"; } print "배경색 $bgcol_val or 배경 이미지 URL $background_val\n"; print "공지사항 강조색 $ncel_val\n"; my($hcolor)=($CONF{'head_color'})? "$CONF{'head_color'}" : "#ffffff"; print "헤드 글자색깔 $hfontcol_val\n"; print "헤드 색깔(찐한색) $headcol_val\n"; print "쉘 색깔1(연한색) $celcol1_val\n"; print "쉘 색깔2(연한색) $celcol2_val\n"; print "커서위치시 쉘색 $overcol_val\n"; print "읽고 있는 글 표시색 $selcol_val\n"; print "숫자 표시색 $numcol_val\n"; print "날짜 표시색 $datecol_val\n"; print "읽은수 표시색 $readcol_val\n"; print "다운수 표시색 $downcol_val\n"; #--------------------------- 그라데이션 환경설정 부분 -------------------------------------------- print "그라데이션 사용\n"; print "\n"; print "템플릿 제작자 정보 - $tpl_maker   $tpl_where\n" if($CONF{'templet'} ne ""); #----------------------------------------------------------------------------------------------- print "logo 이미지 URL $logoimg_val\n"; print "텍스트 로고 $txtlogo_val\n"; for(0..6){ my $sun = $_ + 1; print "빨리가기$sun. ID ".&Input("text", "quick_id$_","$quick_id[$_]","","","17",""); print "NAME ".&Input("text", "quick_name$_","$quick_name[$_]","","","17","")."\n"; } print "검색 데이타간격(1000개 이하) $find_interval\n"; print " 검색창 보이기\n"; print "\n"; print " 속도 빠르게\n"; print "\n"; print "쉬는 요일  "; &get_date; my @en_week = qw(sun mon tue wed thu fri sat); for(0..6){ print &Checkbox("$en_week[$_]","$week[$_]","$lock_week[$_]"); print "$week[$_]  "; } print "\n"; &Tfoot; print "\n"; &Tfoot; print "
"; &ok_admin; print "
"; print &Input("submit","","등록하기").&Input("reset","","다시적기"); &Ffoot; &foot; } else{ &error("pass"); } } sub chk_skindir{ my($kind, $dir); $kind = shift; if($kind eq "img"){ $dir = "$img_dir/skin"; } else{ $dir = "$cgiskin_dir"; } opendir(SKIN_DIR, "$dir"); @skin = sort grep (!/^\.{1,2}$/,readdir(SKIN_DIR)); closedir(SKIN_DIR); } sub point_up{ my(@num_list, @pnt_data, $man_num, $all_pnt, $search_opt, $goto_url); local $cook = "$FORM{'id'}$FORM{'action'}$FORM{'number'}"; &cookie; if($COOKIE{$cook} ne "$ENV{'REMOTE_ADDR'}$cook"){ open(POINT,"$main_dir/num/$FORM{'number'}"); @num_list = ; close(POINT); @pnt_data = split(/\|/,"$num_list[0]"); $man_num = $pnt_data[3]; $all_pnt = $pnt_data[4]; $man_num++; $all_pnt += $FORM{'point_val'}; open(DATA,">$main_dir/num/$FORM{'number'}"); print DATA "|$pnt_data[1]|$pnt_data[2]|$man_num|$all_pnt|"; close(DATA); $search_opt = $FORM{'category'} ? "&category=$FORM{'category'}&keyword=$FORM{'keyword'}" : ""; $goto_url = "$cgi_url?id=$FORM{'id'}&page=$FORM{'page'}&action=view&number=$FORM{'number'}&cnt=no&img=$FORM{'img'}&simple=$FORM{'simple'}$search_opt"; &head; print "\n"; print "

 

 

 


\n"; print "Loading ......\n"; print "
\n"; print "

◀
◀ 게시판으로 돌아가기

\n" if($FORM{'simple'} ne "yes"); &foot; } else{ &error("ip"); } } sub html_in{ my(@html_up, @html_down); if($FORM{'passwd'} eq $CONF{'admin_pwd'}){ &head; &Fhead("POST","$cgi_url"); print &Input("hidden","action","html_write"); print &Input("hidden", "id", "$FORM{'id'}"); &Thead("600","$CONF{'head_color'}","1","0"); print "\n"; &Thead("100%","$CONF{'cel_color1'}","3","0"); print "\n"; &Thead("100%","$CONF{'cel_color2'}","0","3"); open(UPHTML,"$main_dir/up.htm"); @html_up = ; close(UPHTML); print "

ⓝ 게시판 위에 삽입될 html코드 <body>...
\n"; open(DOWNHTML,"$main_dir/down.htm"); @html_down = ; close(DOWNHTML); print "

ⓝ 게시판 아래에 삽입될 html코드 ...</body>
\n"; print "\n"; &ok_admin; print "\n"; print "\n"; print &Input("submit", "", " 완 료 "); print &Input("reset", "", "다시적기"); print "\n"; &Tfoot; print "\n"; &Tfoot; print "\n"; &Tfoot; &Ffoot; &foot; } else{ &error("pass"); } } sub index_repair{ if($FORM{'passwd'} eq $CONF{'admin_pwd'}){ &head; &Fhead("POST","$cgi_url"); print &Input("hidden","action","repair_idx"); print &Input("hidden", "id", "$FORM{'id'}"); &Thead("600","$CONF{'head_color'}","1","0"); print "\n"; &Thead("100%","$CONF{'cel_color1'}","3","0"); print "\n"; &Thead("100%","$CONF{'cel_color2'}","0","3"); print "

인덱스파일을 자동복구 합니다....

관리자 비밀번호를 적으시고 '복구하기' 버튼을 눌러주세요.


\n"; print "(※ 이 서비스는 게시판에 올린 게시물 수와 나타나는 글수가
일치하지 않을때 사용하시면 됩니다.)




"; print "\n"; print "\n"; &ok_admin; print "\n"; print "\n"; print &Input("submit", "", "복구하기"); print &Input("reset", "", "다시적기"); print "

\n"; &Tfoot; print "\n"; &Tfoot; print "\n"; &Tfoot; &Ffoot; &foot; } else{ &error("pass"); } } sub html_write{ my $pass = crypt($FORM{'passwd'},"sp"); if($pass eq $CONF{'admin_pwd'}){ open(UPDATA, ">$main_dir/up.htm"); print UPDATA "$FORM{'html_up'}"; close(UPDATA); open(DOWNDATA, ">$main_dir/down.htm"); print DOWNDATA "$FORM{'html_down'}"; close(DOWNDATA); &load_page; } else{ &error("ok_admin"); } } sub repair_idx{ my($pass) = crypt($FORM{'passwd'},"sp"); if($pass ne $CONF{'admin_pwd'}){ &error("ok_admin"); } for(1..10){ unlink "$main_dir/idx/$_.cgi"; } unlink "$main_dir/idx/index.cgi"; &make_idx; &load_page; } #데이타 길이 제한 함수 ---------------------------------------------------------- sub cut_len{ my($val, $cut_len) = @_; if(length($val) > $cut_len){ $val = substr($val,0,$cut_len); chop $val if(($val =~ tr/[\xA1-\xFE]//)%2 != 0); $val = "$val..."; } return $val; } sub make_conf{ my($pass) = crypt($FORM{'passwd'},"sp"); if($pass eq $CONF{'admin_pwd'}){ if($FORM{'admin_pwd'} eq ""){ $FORM{'admin_pwd'} = $CONF{'admin_pwd'}; } elsif($FORM{'admin_pwd'} eq $FORM{'admin_pwd_eq'}){ $FORM{'admin_pwd'} = crypt($FORM{'admin_pwd'},"sp"); } else{ &error("pass"); } for(0..6){ my $qid_val = "quick_id$_"; my $qname_val = "quick_name$_"; $FORM{'quick_id'} .= "$FORM{$qid_val}|"; $FORM{'quick_name'} .= "$FORM{$qname_val}|"; } $FORM{'lock_week'} = "$FORM{'sun'}|$FORM{'mon'}|$FORM{'tue'}|$FORM{'wed'}|$FORM{'thu'}|$FORM{'fri'}|$FORM{'sat'}|"; open(SAVE,">$main_dir/conf.cgi"); $CONF{'scr_opt'} = $FORM{'scr_opt'}; #업그레이드자를 위해... $CONF{'admin_sender'} = $FORM{'admin_sender'}; #업그레이드자를 위해... $CONF{'link_color'} = $FORM{'link_color'}; #업그레이드자를 위해... foreach (sort keys %CONF) { print SAVE "$_ = $FORM{$_}\n"; } close(SAVE); #------------------------- 페이지별 인덱스 정리 $CONF{'page_num'} = $FORM{'page_num'}; &read_idx; my $num_data = @ary; unless($num_data eq "0"){ &lock; open(NUM,">$main_dir/idx/num.cgi"); print NUM $num_data; close(NUM); for(1..10){ open(PAGE,">$main_dir/idx/$_.cgi"); my $start = ($_ - 1)*$CONF{'page_num'}; for(0..$CONF{'page_num'}-1){ print PAGE "$ary[$start+$_]\n"; } close(PAGE); } &unlock; } #----------------------------------------- &load_page; } else{ &error("ok_admin"); } } sub view_notice{ my(@views, @notice, @auto, $html, $subject, $comments, $rdate, $auto_link, $auto_br, $read_num, $plus_num); open(VFILE,"$main_dir/notice.cgi"); @views = ; close(VFILE); @notice = split(/\|/,$views[0]); $html = $notice[0]; $subject = $notice[1]; $comments = $notice[2]; $rdate=substr($notice[3],0,18); @auto = split(/\|/, $views[1]); $auto_link = $auto[0]; $auto_br = $auto[1]; unless($views[1] =~ /\|/) { #3차 업그레이드 자를 위해... 나중에 삭제???? $auto_br = "1"; $auto_link = "1" if(chomp($views[1]) eq "1"); } open(NUM,"$main_dir/num/notice.cgi"); $read_num = ; close(NUM); $cook = "$FORM{'id'}$FORM{'action'}"; &cookie; if($COOKIE{$cook} ne "$ENV{'REMOTE_ADDR'}$cook"){ $plus_num = ($FORM{'cnt'} ne "no") ? $read_num + 1 : $read_num; } else{ $plus_num = $read_num; } if($FORM{'cnt'} ne "no"){ &lock if($CONF{'speed_up'} eq "no"); open(NFI,">$main_dir/num/notice.cgi"); print NFI "$plus_num"; close(NFI); &unlock if($CONF{'speed_up'} eq "no"); } if ($html ne "1") { $comments =~ s/
/\r\n/g; $comments =~ s//>/g; $comments =~ s/"/"/g; # $comments =~ s/<hr>/


/g; $comments =~ s/\r?\n/
/g; } else{ $comments =~ s/<br>/
/g; $comments =~ s/<p>/

/g; } $comments =~ s/
/\r\n/g if($auto_br ne "1"); if($auto_link eq "1"){ $comments =~ s/(http:\/\/)([\w\+\-\/\=\?\.\~\&]+)/ $1$2<\/font><\/a>/g; if($NT eq "1"){ $comments =~ s/([\w\-]+\@[\w\-+\.]+[\w\-]+)/ $1<\/font><\/a>/g; } else{ $comments=~ s/([\w\-]+\@[\w\-+\.]+[\w\-]+)/ $1<\/font><\/a>/g; } } $comments = &view_dongury("$comments") if($CONF{'dgr_ok'} eq "yes"); &head; print "

\n"; &Thead("100%","","1","0"); print "작성일자 - $rdate\n"; print "\n"; &Thead("100%","0","2","0"); print "ⓝ $subject\n"; print "조회수 [ $plus_num ]\n"; print "\"수정하기\"\n"; print "\"삭제하기\"  \n"; &Tfoot; print "\n"; print "\n"; &Thead("100%","$CONF{'cel_color1'}","3","0"); print "

$comments

"; print "\n"; print ""; #--------------------------------------------------------------------------------- if($CONF{'etc_ok'} eq "yes"){ print "\n"; &Fhead("POST","$cgi_url"); print &Input("hidden","action","etc_write"); print &Input("hidden","id","$FORM{'id'}"); print &Input("hidden","page","$FORM{'page'}"); print &Input("hidden","cnt","no"); print &Input("hidden","number","notice.cgi"); print &Input("hidden","simple","$FORM{'simple'}"); if($FORM{'category'}){ print &Input("hidden","category","$FORM{'category'}"); print &Input("hidden","keyword","$FORM{'keyword'}"); } &Thead("100%","","3","0"); print "\n"; print &Input("submit","", "남기기"); print "  \"간단의견\n"; my(@etc, @color, $end_num, $gd, $color_val); if(-e "$main_dir/etc/notice.cgi"){ open (ETC, "$main_dir/etc/notice.cgi"); @etc = ; close (ETC); chop(@etc); $end_num = @etc; @color= ('#FF0000', '#FF0000', '#FF9F47', '#FF9F47', '#009900', '#009900', '#0C2099', '#0C2099', '#991098', '#991098'); for(0..$end_num-1){ if($etc[$_] ne ""){ my @gubun = split(/\|/, $etc[$_]); $gd = $_ + 1; print "\"$gd번째 $gubun[0]\n"; } } } &Tfoot; &Ffoot; } #---------------------------------------------- print "\n"; &Tfoot; &Thead("100%","","0","0"); print "\n"; &Tfoot; print "\n"; &Tfoot; print "

\"글

\n"; &foot; } sub color_man{ my ($R, $G, $B) = @_; $R = &unhex($R); $G = &unhex($G); $B = &unhex($B); return '#'.$R.$G.$B; } sub unhex{ my(@hex, %HEX, $num, $val); $num = shift; for(1..5){ $hex[$_] = $num%16; last if($num < 16); $num = ($num-$hex[$_])/16; } %HEX = (15 => F, 14 => E, 13 => D, 12 => C, 11 => B, 10 => A); foreach (reverse @hex){ $val .= ($_ >= 10 ) ? $HEX{$_} : $_; } $val = "0$val" if(length($val) == 1); return $val; } sub error { local($err) = $_[0]; &head; print "



"; print ""; if($err eq "id") { print "

게시판이름 에러

\n"; print "귀하가 요구하는 게시판을 찾을 수 없읍니다
\n"; print "반드시 board.cgi?id=db 형식으로 불러야 합니다.\n"; } elsif($err eq "bad_link"){ print "

무단링크 에러

\n"; print "무단링크는 삼가해 주세요...\n"; } elsif($err eq "bad_ip"){ print "

당신은 불량사용자입니다.

\n"; print "당신은 불량사용자로 등록되었습니다...\n"; } elsif($err eq "bad_word"){ print "

나쁜 단어사용 에러

\n"; print "'$bad_word'(이)라는 단어는 사용금지된 단어입니다.
\n"; print "바르고 고운말을 사용해 주세요...\n"; } elsif($err eq "dobae"){ print "

도배글 에러

\n"; print "도배(같은글을 여러번 올리는 행위)는 삼가해 주세요...\n"; } elsif($err eq "time_chk"){ print "

타임채킹 에러

\n"; print "도배(같은글을 여러번 올리는 행위)를 방지하기 위하여
\n"; print "글을 남기신후 $cook_time초간은 글을 남기실 수 없습니다...
\n"; print "현재시간이후 $cook_time초가 지난후에만 글을 올리실 수 있습니다..."; } elsif($err eq "no_dir"){ print "

게시판 아이디 에러

\n"; print "귀하가 요구하는 게시판의 아이디 디렉토리를 찾을 수 없읍니다
\n"; print "
spboard디렉토리속의 id디렉토리 속에다가
\n"; print "$FORM{'id'} 디렉토리를 만드시고 퍼미션을 777로 주셔야 합니다.\n"; } elsif($err eq "ip") { print "

중복추천 에러

\n"; print "중복추천은 삼가해 주세요...\n"; } elsif($err eq "pass") { print "

비밀번호 에러

\n"; print "비밀번호가 일치하지 않습니다.\n"; } elsif($err eq "ok_admin") { print "

비밀번호 에러

\n"; print "관리자 비밀번호가 일치하지 않습니다.\n"; } elsif($err eq "admin") { print "

비밀번호 에러

\n"; print "현재 이 게시판은 관리자만 글을 남기실 수 있습니다.
관리자 비밀번호가 일치하지 않습니다.\n"; } elsif($err eq "email") { print "

email 에러

\n"; print "이메일 형식이 잘못되었네요...\n"; } elsif($err eq "exist") { print "

같은 이름의 파일이 존재합니다.

\n"; print "파일이름을 바꾸신후 올려주세요...\n"; } elsif($err eq "keyword") { print "

검색어 입력 에러

\n"; print "검색어를 입력하시지 않으셨어요
검색하려면 검색어를 입력하세요\n"; } elsif($err eq "size") { print "

파일의 사이즈가 너무 커요...

\n"; print "현재 올릴수 있는 최대 용량은 파일당 $CONF{'max_size'} MB 입니다.
자료실의 용량관계로 사이즈가 최대용량보다 작은 파일을 올려주세요.\n"; } elsif($err eq "double") { print "

둘중 하나만 가능합니다.

\n"; print "파일링크나 파일업로드 둘중 하나만 선택해 주세요...\n"; } elsif($err eq "link") { print "

파일 링크는 http:\/\/ 또는 ftp:\/\/ 로 시작 해야 합니다.

"; } elsif($err eq "notice") { print "

공지사항 입력 에러!!!

\n"; print "제목이나 내용을 꼭 적어 주세요...\n"; } elsif($err eq "dgr"){ print "

동글이를 너무 많이 사용했네요...

\n"; print "동글이는 최대 50개까지 사용가능합니다...\n"; } elsif($err eq "date") { print "

날짜 입력 에러!!!

\n"; print "날짜가 재대로 입력되지 않았습니다...\n"; } elsif($err eq "send"){ print "

메일 입력 에러!!!

\n"; print "받는이 이메일이 재대로 입력되지 않았습니다...\n"; } elsif($err eq "no_select"){ print "

선택하신 글이 없네요!!!

\n"; print "장바구니에 담아 보기 원하시는 글들을 체크해 주세요...\n"; } else{ print "

게시판 작성 에러

\n"; print "이름, 제목, 내용란은 반드시 채우셔야 합니다\n"; } print "
"; print "


\n"; print "◀돌아가기(BACK)

\n"; print "

\"글





\n"; &foot; } sub Input{ my($type, $name, $value, $back_color, $solid_color, $size, $maxlength) = @_; $back_color = "#FAFAFA" if($back_color eq ""); $solid_color = "#333333" if($solid_color eq ""); my($name_val) = $name ? "name=$name" : ''; my($value_val) = ($value ne "") ? "value=\"$value\"" : ''; my($size_val) = $size ? "size=$size" : ''; my($max_len) = $maxlength ? "maxlength=$maxlength" : ''; my($input_style) = "style='background-color:$back_color;border:1 solid $solid_color;height:20'" if($type ne "hidden"); return "\n"; } sub Textarea{ my($cols, $rows, $name, $back_color, $solid_color,$comment) = @_; my($textarea_style); $back_color = "#FAFAFA" if($back_color eq ""); $solid_color = "#333333" if($solid_color eq ""); $textarea_style = "style='background-color:$back_color;border:1 solid $solid_color'"; return "\n"; } sub Checkbox{ my($name, $value, $check_val) = @_; $check_val = $check_val ? "checked" : ""; return "\n"; } #테이블 관련 함수--------------------------------------------------------------- sub Thead{ my($width, $bgcolor, $cellpadding, $cellspacing) = @_; my($wid_val) = $width ? "width=$width" : ''; my($bgcolor_val) = $bgcolor ? "bgcolor=$bgcolor" : ''; print "

"; } sub Tfoot{ print "
\n"; } #form 관련 함수 ---------------------------------------------------------------- sub Fhead{ my($method, $action, $enctype, $name) = @_; my($enc_val) = $enctype ? "enctype=$enctype" : ''; my($name_val) = $name ? "name=$name" : ''; print "\n"; } sub Ffoot{ print "\n"; } sub head { my($os_data) = $ENV{'HTTP_USER_AGENT'}; print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n"; print "\n"; print "\n"; if($FORM{'simple'} eq "yes"){ print "Simple view window ^.^\n"; $CONF{'left_right'} = "center"; } else{ print "SPBOARD v4.5\n"; } # my $CONF{'font_size'} = $CONF{'font_size'} ? "$CONF{'font_size'}" : "9pt"; print "\n"; print "\n"; print "\n"; print "\n"; my($back, $color_val); if($CONF{'background'} ne ""){ $back="background=$CONF{'background'}"; } else{ $back="bgcolor=$CONF{'bgcolor'}"; } print "\n"; #------------------------------------------------------ 윗부분 html테그 넣기 if((-e "$main_dir/up.htm") && ($FORM{'simple'} ne "yes")){ open(UPDATA,"$main_dir/up.htm"); my @html_up = ; close(UPDATA); foreach $_(@html_up) { print "$_"; } print "
\n" if($html_up[0] ne ""); } #---------------------------------------------------------------- #---------------------------------------------- 화면 배열 정열 오른쪽 왼쪽 중간... $CONF{'left_right'} ||= "center"; $CONF{'tbl_width'} = "98%" if($FORM{'simple'} eq "yes"); &Thead("100%","","10","0"); print "\n"; print "\n"; print "\n"; &Tfoot; &Thead("100%","$CONF{'cel_color1'}","0","0"); print "\n"; &Tfoot; &Thead("100%","","3","0"); print "\n"; &Tfoot; &Thead("100%","","0","0"); print "\n"; &Tfoot; print "\n"; &Tfoot; } } if(($quick_name[0] eq "") || ($act eq "input_form")){ print "

\n"; } } sub foot { print "

\"관리자
\n" if(($FORM{'simple'} ne "yes") && ($err eq "")); if($customer eq "0"){ if($CONF{'img_skin'} ne ""){ open(SKIN,"$img_dir/skin/$CONF{'img_skin'}/$CONF{'img_skin'}.txt"); my @skin_data = ; close(SKIN); my @skin = split(/\|/, "$skin_data[0]"); my($name) = $skin[1]; my($home) = $skin[2]; print "
Powered by sepal / Designed by $name
\n" if($FORM{'simple'} ne "yes"); } else{ print "
POWERED BY SEPAL - SPBOARD v4.5
\n" if($FORM{'simple'} ne "yes"); } } else{ print "
$copyright
\n" if($FORM{'simple'} ne "yes"); } print "\n"; print "
\n"; #--------------------------------------------- if($FORM{'simple'} ne "yes"){ if($CONF{'logo_img'} ne ""){ print "\"관리자\n"; } elsif($CONF{'logo_txt'} ne ""){ &Thead("","$CONF{'cel_color1'}","0","0"); print "
\n"; &Thead("100%","","0","0"); $color_val = $CONF{'head_color'} ? "bgcolor=$CONF{'head_color'}": ""; print "
  "; print "$CONF{'logo_txt'}  
\n"; print "\n"; &Tfoot; #----------------------------------------------- 밑부분 html테그 넣기 if((-e "$main_dir/down.htm") && ($FORM{'simple'} ne "yes")){ open(DOWNDATA,"$main_dir/down.htm"); my @html_down = ; close(DOWNDATA); foreach $_(@html_down) { print "$_"; } } #---------------------------------------------------------------- print "

\n"; print "\n"; exit; } sub lock{ my($lock_file, $lock_sec, $chk_cnt, $sleep_sec); $lock_file = "locking"; $lock_sec = 2; #lock거는 시간(초) $chk_cnt = $lock_sec*10; $sleep_sec = 0.1; while ($chk_cnt--){ if(-e "$main_dir/idx/$lock_file"){ select (undef,undef,undef,$sleep_sec); } else{ open (LOCK,">$main_dir/idx/$lock_file"); close (LOCK); return 1; } } return 0; } sub unlock{ my ($lock_file) = "locking"; unlink ("$main_dir/idx/$lock_file"); } sub mail_notice{ my $from_man = $FORM{'email'} ? "$FORM{'name'}" : "$FORM{'name'}"; if ($FORM{'html'} ne "1") { $FORM{'comments'} =~ s/
/\r\n/g; $FORM{'comments'} =~ s//>/g; $FORM{'comments'} =~ s/"/"/g; $FORM{'comments'} =~ s/\r?\n/
/g; $FORM{'comments'} =~ s/
/\r\n/g if($FORM{'auto_br'} ne "1"); } else{ $FORM{'comments'} =~ s/
/\r\n/g if($FORM{'auto_br'} ne "1"); $FORM{'comments'} =~ s/<br>/
/g; $FORM{'comments'} =~ s/<p>/

/g; } open (MAIL, "|$sendmail -t") || die "화일 열기 실패!\n"; print MAIL "To: $addr\n"; print MAIL "From: $FORM{'name'}<$FORM{'email'}>\n"; print MAIL "Subject: $FORM{'name'}님께서 보내는 답변글...\n"; print MAIL "Content-Type: text/html; charset=euc-kr\n"; print MAIL "\n"; print MAIL "

\n"; print MAIL "\n"; print MAIL "\n"; print MAIL "
▣$FORM{'name'}님이 남기신 답변글입니다.▣
\n"; print MAIL "\n"; print MAIL "\n"; print MAIL "\n"; print MAIL "
\n"; print MAIL "
\n"; print MAIL "\n"; print MAIL "게시판 DB명: $FORM{'id'}
\n"; print MAIL "작성자: $from_man
\n"; print MAIL "작성일시: $date
\n"; print MAIL "홈 URL: $FORM{'homepage'}
\n" if($FORM{'homepage'}); print MAIL "제목:$FORM{'subject'}
\n"; print MAIL "
\n"; print MAIL "$FORM{'comments'}\n"; print MAIL "

This message from $CONF{'home_url'}   

\n"; print MAIL "
\n"; print MAIL "
\n"; close (MAIL); } sub sendmail { open (MAIL, "|$sendmail -t"); print MAIL "To: $addr\n"; print MAIL "From: $CONF{'admin_name'}<$CONF{'admin_mail'}>\n"; print MAIL "Subject: 답변이 등록되었습니다.\n\n"; print MAIL "\n\n$FORM{'name'}님께서 귀하의 글에대한 답변을 등록하였읍니다.\n"; print MAIL "아래 홈에 방문하시어 확인하시기 바랍니다.\n\n"; print MAIL "◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n"; print MAIL "\t This message from $CONF{'home_url'}\n"; print MAIL "◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n\n"; close (MAIL); }