Axil S/E kdk018
1997. 4. 16.
Kim Do Kyung
SUBJECT: 웹서버에 방명록(Guestbook) 만들기
DESCRIPTION:
★ 웹서버에 방명록 만들기
※ 방명록 화일
실제 방문한 사람들의 기록이 이 화일에 남게 된다.
### guestbook.html ###
방명록
방명록...
새로운 방명록을 작성하시려면 여기를 클릭하세요.
※ 방명록을 작성하는 화일
이 화일에서 방명록 CGI Program을 Call하게 된다.
### addbook.html ###
방명록 작성
방명록 작성
※ 방명록 CGI Program
방명록 CGI Script로 모든 방명록 프로그램의 근간이라 할 수 있다.
#!/usr/local/bin/perl
$mesgfile = "../htdocs/guestbook.html"; <= /cgi-bin 에 guestbook.pl이 있음을 알
수 있다.
$DATE = `date +%y/%m/%d`; <= "년도/월/일"의 형식으로 출력
# HTML문서의 FORM에서 넘겨받은 값을 분리해 낸다.
if ($ENV{'REQUEST_METHOD'} eq "GET") { <= 여기서부터 ....
$FORM_DATA = $ENV{'QUERY_STRING'};
}
else {
$LENGTH = $ENV{'CONTENT_LENGTH'};
while($LENGTH) {
$FORM_DATA .= getc(STDIN);
$LENGTH--; 이 곳은 다른 CGI에서도 응용할 수 있다.
} guestbook.pl을 호출할때의 parameter passing
} URL이 guestbook.pl?name=KDK&email=kdk@hyundai&... 이렇게
되므로 &와 ?를 이용해 DATA를 parsing하는 부분이다.
foreach (split(/&/, $FORM_DATA)) {
($NAME, $VALUE) = split(/=/, $_);
$NAME =~ s/\+/ /g;
$NAME =~ s/%([0-9|A-F]{2})/pack(C, hex($1))/eg;
$VALUE =~ s/\+/ /g;
$VALUE =~ s/%([0-9|A-F]{2})/pack(C, hex($1))/eg;
$FORM{$NAME} = $VALUE; <= 여기까지 ...
}
#########################
# Get Variables
#########################
$name = $FORM{'name'}; <= Standard Input을 통해 들어온 변수들을 프로그램
$email = $FORM{'email'}; 에서 사용할 변수로 대입한다.
$comment = $FORM{'comment'};
#########################
# 방명록에 추가
#########################
open (MAIN, "$mesgfile") || die $!; <= $mesgfile을 오픈해 main이라는 Array에
@main = ; 모든 라인을 저장해 둔다.
close(MAIN);
open (MAIN, "> $mesgfile") || die $!; <= $mesgfile을 쓰기 모드로 오픈
foreach $main_line (@main) {
if ($main_line =~ //) { <= begin이 있는 라인에 삽입(새로운내용)
print MAIN "\n";
print MAIN "$name\n";
print MAIN "$DATE
\n";
print MAIN "$comment
\n";
}
else {
print MAIN "$main_line";
}
}
#########################
# 보여 주기
#########################
print "Content-type: text/html\n\n"; <= HTML문서임을 Client에게 알려준다.
open (MAIN, "$mesgfile") || die $!; <= 새로운 라인이 추가된 $mesgfile 을 출력
while () {
print "$_";
}
close (MAIN);