#!/usr/bin/perl ############################################################ $data_dir = "."; #data.txt 파일이 있는곳의 절대 경로 $photo_dir = "$data_dir/photo"; #사진 저장 위치 절대경로 $photo_url = "./photo"; #사진이 저장되는곳URL $cgi_url = "./n.cgi"; #이 cgi의 Url $img_url = "./img"; #아이콘 저장 URL $max_data = "10000"; #최대 보관 글 수 $admin = "rockit"; #관리자 비밀번호 관리자가 글삭제시 필요함 $AllowHTML = 1; #html 문서 입력을 허용하면 1 안하면 0 $max_lang = 10000; #자기소개 최대 글 수 $gate = "0"; #시작화면 문을 열려면 open:0 close:1 ############################################################ &get_input; if(($FORM{'action'} eq "") && ($FORM{'page'} eq "")) { if($FORM{'page'} eq ""){ $FORM{'page'} = "1"; $page = 1; } if($gate eq "0"){ &display; } else{ ✓ } } elsif($FORM{'action'} eq "check") { if($FORM{'myname'}) { &check_name; } else { $err=check; &error; } } elsif($FORM{'action'} eq "addform") { &input; } elsif(($FORM{'action'} eq "write") || ($FORM{'action'} eq "modify_write")) { if(($FORM{'name'} eq "") || ($FORM{'comments'} eq "") || ($FORM{'sex'} eq "")|| ($FORM{'age'} eq "")|| ($FORM{'job'} eq "")|| ($FORM{'hobby'} eq "")|| ($FORM{'special'} eq "")) { &error; } elsif($FORM{'action'} eq "write") { &write; } else{ &modify_write; } } elsif($FORM{'action'} eq "modify"){ &modify; } elsif($FORM{'action'} eq "modifyok"){ if($FORM{'passwd'} eq "") { &error_pass; } else{ &modifyok; } } elsif($FORM{'action'} eq "erase") { &erase; } elsif($FORM{'action'} eq "eraseok") { if($FORM{'passwd'} eq "") { &error_pass; } &eraseok; } elsif($FORM{'action'} eq "search") { if($FORM{'keyword'}) { &search; }else{ $err = search; &error;} } elsif($FORM{'page'}) { &display; } ✓ ###################################################### sub get_input { if ($ENV{'QUERY_STRING'}) { @args = split(/&/, $ENV{'QUERY_STRING'}); foreach $pair (@args) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; if ($AllowHTML != 1) { $value =~ s/<([^>]|\n)*>//g; } $FORM{$name} = $value; } } else { $content_type = $ENV{'CONTENT_TYPE'}; $content_len = $ENV{'CONTENT_LENGTH'}; binmode STDIN; read(STDIN, $buffer, $content_len); if ((!$content_type) ||($content_type eq 'application/x-www-form-urlencoded')) { # Process the name=value argument pairs @args = split(/&/, $buffer); $data = ''; foreach $pair (@args) { ($name, $value) = split(/=/, $pair); # Unescape the argument value $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # Save the name=value pair for use below. $FORM{$name} = $value; } } elsif ($content_type =~ m#^multipart/form-data#) { # find boundary ($boundary = $content_type) =~ s/^.*boundary=(.*)$/\1/; @pairs = split(/--$boundary/, $buffer); @pairs = splice(@pairs,1,$#pairs-1); for $part (@pairs) { ($dump,$fline,$value) = split(/\r\n/,$part,3); if($fline =~ /filename/) { $real_file = $fline; } next if $fline =~ /filename=\"\"/; $fline =~ s/^Content-Disposition: form-data; //; (@columns) = split(/;\s+/, $fline); ($name = $columns[0]) =~ s/^name="([^"]+)"$/\1/g; if ($#columns > 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 { $arrvalue = $FORM{$name}; undef $FORM{$name}; $FORM{$name}[0] = $arrvalue; 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); } } } ########################################################### sub check { &head; open (DATA,"$data_dir/user.txt"); @numdata = ; $fildata = @numdata; close(DATA); &foot; } ########################################################## sub check_name { open (CHECK, "$data_dir/user.txt"); @myn = ; close (CHECK); $mys = @myn; for($w=0;$w<=$mys;$w++) { @nelist = split(/\|/,$myn[$w]); if($nelist[2] eq $FORM{'myname'}) { &display; } } print "Location: $cgi_url?action=addform\n\n"; } ########################################################## sub display { open(Num,"<$data_dir/data.txt"); $num = ; close(Num); open (DATA,"$data_dir/user.txt"); @num_data = ; $fil_data = @num_data; $stop = $fil_data-1; close(DATA); $file_num = $num; $tot_pg = int($fil_data/10); if(($tot_pg*10) < $fil_data) {$tot_pg = $tot_pg + 1; } &head; open(CONT, "$data_dir/connect.txt"); $con = ; close(CONT); chop($con); @huyn = split(/\|/, $con); if(($FORM{'page'} eq "") || ($FORM{'page'} ==1)) { if($tot_pg <= 1) { print ""; } else { print ""; } print "
\n"; if($stop >= 10) { $last = $stop-9; } else {$last = 0;} $start = $stop; &list; $page = 1; print "
\n"; } #여기까지 1페이지 미만일경우 if(($FORM{'page'} ne "") &&($FORM{'page'} !=1)) { $scount = (($FORM{'page'}-1)*10); $start = $stop-$scount; $last = $start-9; if($last <= 0) {$last = 0;} $pre_pg= $FORM{'page'} - 1; $next_pg = $FORM{'page'} + 1; if($next_pg <= $tot_pg) { print ""; } else { print ""; } print "
\n"; &list; } print "

"; &pagemove; &find; &foot; } ######################################################### sub list { for($p=$start;$p>=$last;$p -=1) { $file = $num_data[$p]; @Temp = split(/\|/,$file); if($Temp[7]) { $link = ""; } else { if(($Temp[13] eq "\n") || ($Temp[13] eq "http://\n") ||($Temp[13] eq "")){ if($Temp[3] ne "man"){ $link = ""; } else{ $link = ""; } }else{ $link = ""; } } if(($Temp[12] eq "\n") || ($Temp[12] eq "http://\n") ||($Temp[12] eq "")) { $Temp[12] = "사이트 준비중"; } print <

이름: $Temp[2]

수정하기 삭제하기
 관련사이트: 지금방문! 대표이메일(연락처): $Temp[6] 업종분류: $Temp[5]

$link

 위치: $Temp[10] 출구정보: $Temp[4]

 $Temp[11]

START } } ######################################################### sub head { print "Content-type: text/html\n\n"; print < ▒ Nsubway Index(한눈에 보기) 페이지 ▒
EOT } ########################################################### sub find { print ""; print ""; } ########################################################### sub foot { print "

Powered By Nsubway\n"; print "

\n"; exit; } ########################################################## sub input { &head; print <
이름
주고객층성별남 여
업종분류
출구정보
출구정보Link
위치
대표자이메일
관련사이트
업소사진
사진링크
비밀번호삭제시 필요
업소소개

START print "|뒤로|\n"; &foot; } ######################################################### sub write { $FORM{'email'} =~ s/\s//g; $FORM{'comments'} =~ s/\cM//g; $FORM{'comments'} =~ s/\n/
/g; $lengh = length($FORM{'comments'}); if($lengh > $max_lang) { &error_too; } if($FORM{'photo'}) { &veryfy; if(-e "$photo_dir/$org_name") { $err = "exit"; &error; } else { &write_file; # $size = (-s "$photo_dir/$org_name"); # $size = int($size/1000); # $size = "$size k"; } } open(Num,"<$data_dir/data.txt"); $num = ; close(Num); open(Num,">$data_dir/data.txt"); $num = $num+1; print Num "$num\n"; close(Num); &getdate; if(-e "$data_dir/user.txt") { open(USER,">>$data_dir/user.txt"); } else { open(USER,">$data_dir/user.txt"); } my($pass) = crypt($FORM{'passwd'}, "sp"); print USER "$num\|$pass\|$FORM{'name'}\|$FORM{'sex'}\|$FORM{'job'}\|$FORM{'age'}\|$FORM{'email'}\|$org_name\|$date\|$FORM{'hobby'}\|$FORM{'special'}\|$FORM{'comments'}|$FORM{'homepage'}|$FORM{'photo_link'}\n"; close(USER); open(CONN, "$data_dir/connect.txt") ; $conn = ; close(CONN); @names = split(/\|/,$conn); $names[0] = $names[0]+1; if($FORM{'sex'} eq "man") { $names[1] = $names[1]+1; } else{ $names[3] = $names[3]+1; } $names[2] = int(($names[1]/$names[0])*100); $names[4] = int(($names[3]/$names[0])*100); if($FORM{'age'} < 20) { $names[5] = $names[5]+1; } elsif(($FORM{'age'} >= 20) && ($FORM{'age'} < 30)) { $names[7] = $names[7]+1; } elsif(($FORM{'age'} >= 30) && ($FORM{'age'} < 40)) { $names[9] = $names[9]+1; } else{ $names[11] = $names[11]+1; } $names[12] = int(($names[11]/$names[0])*100); $names[10] = int(($names[9]/$names[0])*100); $names[8] = int(($names[7]/$names[0])*100); $names[6] = int(($names[5]/$names[0])*100); open(NCNN, ">$data_dir/connect.txt"); print NCNN "$names[0]\|$names[1]\|$names[2]%\|$names[3]\|$names[4]%\|$names[5]\|$names[6]%\|$names[7]\|$names[8]%\|$names[9]\|$names[10]%\|$names[11]\|$names[12]%\n"; close(NCNN); &display; } ####################################################### sub modify_write { $FORM{'email'} =~ s/\s//g; $FORM{'comments'} =~ s/\cM//g; $FORM{'comments'} =~ s/\n/
/g; $lengh = length($FORM{'comments'}); if($lengh > $max_lang) { &error_too; } if($FORM{'photo'}) { &veryfy; if(-e "$photo_dir/$org_name") { $err = "exit"; &error; } else { &write_file; } } open(FILE,"<$data_dir/user.txt"); @file = ; close (FILE); $end = @file; open(NFILE,">$data_dir/user.txt"); for($q=0;$q<=$end;$q++) { $new = $file[$q]; @Temd = split(/\|/,$new); if($Temd[0] eq $FORM{'num'}) { if($FORM{'photo'} eq ""){ if($FORM{'photo_link'} ne ("\n" || "http://\n" || "" )){ if($Temd[7] ne ""){ unlink("$photo_dir/$Temd[7]"); } print NFILE "$FORM{'num'}|$FORM{'passwd'}|$FORM{'name'}|$FORM{'sex'}|$FORM{'job'}|$FORM{'age'}|$FORM{'email'}||$FORM{'date'}|$FORM{'hobby'}|$FORM{'special'}|$FORM{'comments'}|$FORM{'homepage'}|$FORM{'photo_link'}\n"; } else{ print NFILE "$FORM{'num'}|$FORM{'passwd'}|$FORM{'name'}|$FORM{'sex'}|$FORM{'job'}|$FORM{'age'}|$FORM{'email'}|$Temd[7]|$FORM{'date'}|$FORM{'hobby'}|$FORM{'special'}|$FORM{'comments'}|$FORM{'homepage'}|$FORM{'photo_link'}\n"; } } else{ unlink("$photo_dir/$Temd[7]"); print NFILE "$FORM{'num'}|$FORM{'passwd'}|$FORM{'name'}|$FORM{'sex'}|$FORM{'job'}|$FORM{'age'}|$FORM{'email'}|$org_name|$FORM{'date'}|$FORM{'hobby'}|$FORM{'special'}|$FORM{'comments'}|$FORM{'homepage'}|$FORM{'photo_link'}\n"; } } else { print NFILE $new; } } close(NFILE); &display; } sub getdate { ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } if ($mday < 10) { $mday = "0$mday"; } if ($mon < 10) { $mon = "0$mon"; } $month = ($mon + 1); if ($month < 10) { $month = "0$month"; } if($year ne "99"){ if($year > 100){ $year=($year-100)+2000; } elsif($year < 10){ $year=2000+$year; } else{ $year="2000"; } } else{ $year="1999"; } $date = "$year년 $month월 $mday일 $hour시$min분"; } ######################################################### sub search { open (USE, "$data_dir/user.txt"); @use = ; close(USE); $last = @use; $o = 0; @num_data = (); for ($t=0;$t<=$last;$t++) { $find = $use[$t]; if($find =~ /$FORM{'keyword'}/i) { $num_data[$o] = $find; $o++; } } $stop = $o-1; $tot_pg = int($o/10); if(($tot_pg*10) < $o) {$tot_pg = $tot_pg + 1; } &head; if(($FORM{'page'} eq "") || ($FORM{'page'} ==1)) { print "검색결과 $o 곳 ($FORM{'page'}/$tot_pg page)\n"; if($tot_pg <= 1) { print ""; } else { print ""; } print "
\n"; if($stop >= 10) { $last = $stop-9; } else { $last = 0; } $start = $stop; &list; $page = 1; print "
\n"; } if(($FORM{'page'} ne "") &&($FORM{'page'} !=1)) { $scount = (($FORM{'page'}-1)*10); $start = $stop-$scount; $last = $start-9; if($last <= 0) {$last = 0;} $pre_pg= $FORM{'page'} - 1; $next_pg = $FORM{'page'} + 1; print "검색결과 $o 곳 ($FORM{'page'}/$tot_pg page)\n"; if($next_pg <= $tot_pg) { print ""; } else { print ""; } print "
\n"; &list; } print "

"; &pagemove; &find; &foot; } ######################################################### sub error { &head; print "

등록 에러

\n"; print "
    \n"; if ($err eq "check" ) { print "
  1. 이름을 기록해야 확인이 가능합니다.\n"; } elsif($err eq "exit") { print "
  2. 동일한 이름의 사진파일이 존재합니다.
  3. 파일 이름을 바꾸어서 다시 하십시오\n"; } elsif ($err eq "expt" ) { print "
  4. 사진파일은 확장자가 gif나 jpg이어야 합니다.
  5. 확장자가 맞는 파일을 다시 준비하여 주십시오\n"; } elsif ($err eq "search" ) { print "
  6. 찾고자하는 곳의 이름,출구정보,위치,업종분류 등을 기록하여 찾으십시오.\n"; } else { print "
  7. 사진과 비밀번호란 외에는 모두 채워야 합니다.
  8. 빈칸을 채운후 다시 등록하세요.\n"; } print "
  9. 뒤로 돌아가서 다시 시도 하십시오.
\n"; print "다시 작성\n"; &foot; } ######################################################### sub error_too { &head; print "

등록 에러

\n"; print "내용을 좀 $max_lang자 이내로 줄여 주십시오

\n"; print "뒤로 돌아가서 다시 시도 하십시오.

\n"; print "다시 작성\n"; &foot; } ################## sub modify { &head; print <현제 데이타를 수정합니다...

비밀번호
START print "|뒤로|\n"; &foot; } sub modifyok { if($FORM{'passwd'}) { open(FILE,"$data_dir/user.txt"); @file = ; close (FILE); $end = @file; open(NFILE,"$data_dir/user.txt"); for($q=0;$q<=$end;$q++) { $new = $file[$q]; @Temd = split(/\|/,$new); if($Temd[0] == $FORM{'num'}) { my($pass) = crypt($FORM{'passwd'}, "sp"); if(($FORM{'passwd'} eq $admin)||($pass eq $Temd[1])) { $Temd[11] =~ s/
/\n/g; &head; print < START if($Temd[3] eq "man"){ $sex_man = "checked"; } else{ $sex_woman = "checked"; } print <\n"; START if($Temd[13] ne ""){ print "\n"; } else{ print "\n"; } print <
이름
주고객층성별남 여
업종분류
출구정보
출구정보Link
위치
대표자이메일
관련사이트
업소사진
사진 링크
사진 링크
업소소개

END print "|뒤로|\n"; &foot; } else{ $err = "modify"; &error_pass; } } } } } sub erase { &head; print <관리 페이지입니다.
비밀번호
START print "|뒤로|\n"; &foot; } ####################################################### sub eraseok { if($FORM{'passwd'}) { if($FORM{'passwd'} eq $admin) { $pass = ok; open(FILE,"<$data_dir/user.txt"); @file = ; close (FILE); $end = @file; open(NFILE,">$data_dir/user.txt"); for($q=0;$q<=$end;$q++) { $new = $file[$q]; @Temd = split(/\|/,$new); if($Temd[0] == $FORM{'num'}) { if($Temd[7]) {unlink("$photo_dir/$Temd[7]");} } else {print NFILE $new; } } close(NFILE); } else { open(FILE,"<$data_dir/user.txt"); @file = ; close (FILE); $end = @file; open(NFILE,">$data_dir/user.txt"); for($q=0;$q<=$end;$q++) { $new = $file[$q]; @Temd = split(/\|/,$new); my($pass) = crypt($FORM{'passwd'}, "sp"); if(($Temd[0] == $FORM{'num'})&&($pass eq $Temd[1])) { $disp_ok = "ok"; if($Temd[7]) { unlink("$photo_dir/$Temd[7]");} } else {print NFILE $new; } } close(NFILE); } } if($disp_ok eq ok) { &display; } else { &error_pass; } } ##################################################### sub error_pass { if($err eq "modify"){ $message = "수정"; } else{ $message = "삭제"; } &head; print "

비밀번호 에러

\n"; print "등록 사항을 $message 하려면 등록 당시의 비밀번호를 넣으시오

\n"; print "뒤로 돌아가서 다시 시도 하십시오.

\n"; print "검색페이지\n"; &foot; } sub pagemove{ print "

"; $page=$FORM{'page'}; if($page eq ""){ $page = "1"; } $term = 10; $first = 1; $last = $term; while ($first <= $tot_pg) { if (($first <= $page) && ($page <= $last)) { $prevp = $first - 1; if ($prevp > 0) { if ($FORM{'action'} eq "search") { print "[이전]....."; } else{ print "[이전]....."; } } else { print "[이전]....."; } if ($last <= $tot_pg) { for ($pa = $first; $pa <= $last; $pa++) { if ($pa == $page) { print "[$pa] "; } else { if($FORM{'action'} eq "search") { print "[$pa] "; } else{ print "[$pa] "; } } } } else { for ($pa = $first; $pa <= $tot_pg; $pa++) { if ($pa == $page) { print "[$pa] "; } else { if($FORM{'action'} eq "search"){ print "[$pa] "; } else{ print "[$pa] "; } } } } $nextp = $last + 1; if ($nextp <= $tot_pg) { if($FORM{'action'} eq "search") { print ".....[다음]"; } else{ print ".....[다음]"; } } else { print ".....[다음]"; } } $first = $first + $term; $last = $last + $term; } print "
"; } ######################################################### sub veryfy { $upfile = $FORM{'photo'}; @a = split(/\"/,$real_file); @b = split(/\\/,$a[3]); $t = @b; $org_name = ($b[$t-1]); } ######################################################### sub write_file { $filename = "$photo_dir/".$org_name; ($t,$b) = split(/\./,$org_name); if(($b eq gif) || ($b eq jpg)) { open(FILE, ">$filename") || exit(1); binmode FILE; print FILE $upfile; close FILE; } else { $err = expt; &error; } } ################################################# exit(0);