아파치 설정
펄이 설치 되어 있나 한번 봅니다.
# which perl
아파치 설정디렉토리 (/www/conf/httpd.conf)의 다음 내용이 없으면 추가를 합니다.
AddHandler cgi-script .cgi ScriptAlias /cgi-bin/ "/www/cgi-bin/" AllowOverride None Options None Order allow,deny Allow from all |
1) 펄 모듈 설치
Perl `DBD'/`DBI' client code 는 최신 안정 버전을 사용한다.
Perl 관련프로그램 두가지(세가지)를 다운로드한다.
http://www.cpan.org/modules/01modules.index.html
Msql-Mysql-modules-1.2204.tar.gz
DBI-1.13.tar.gz
Data-Dump-0.03.tar.gz
('Data-Dumper'), 'DBI', 'Msql-Mysql-modules' 을 순서대로 설치한다.
2) 우선 압축된 패키지를 푼다.
shell> tar xzvf DBI-VERSION.tar.gz shell> tar xzvf Msql-Mysql-modules-VERSION.tar.gz |
3) 생성된 디렉토리로 이동
shell> cd DBI-VERSION |
4. 컴파일 하고 설치
shell> perl Makefile.PL shell> make shell> make test( 참고) shell> make install |
5) 테스트
참고로 make test. 모든 모듈을 검증하기 때문이다.
6) 나머지지 두개 패키지 설치
나머지 'Msql-Mysql-modules'를 위와 같은 방법으로 설치한다.
테스트
1) /www/cgi-bin/datedisp.cgi 이 화일을 vi 로 편집한다.
#! /usr/bin/perl print "Content-type: text/html"; $date = `date`; print ("Today is $date"); |
2) 권한을 바꾸어 준다.
chmod 755 datedisp.cgi |
3) /www/cgi-bin 디렉토리에서 실행을 해본다.
./datedisp.cgi or perl datedisp.cgi |
4) 브라우저에서 다음을 실행합니다.
http://localhost/cgi-bin/datedisp.cgi |
디렉토리, 화일 만들기
#!/usr/bin/perl use Mysql; $dbh = Mysql->connect("","dbname","user","password"); print "Content-type: text/html"; mkdir('aaa/bbb' , 0777) or die print "디렉토리를 만들수 없습니다. 이미 만들어 졌습니다.<br>"; print "오게이 오게이"; &printf_file("aaa/bbb/test.htm"); exit; sub print_file{ my ($filename) = @_; $imsi; $top="<div align=left><table border=0 cellpadding=5><tr><td valign=top><p align=left><font face=굴림 size=2>"; $bottom="</font></td></tr></table></div>"; $parse{content} =~ s//<br>/g; $imsi = $top; $imsi.= "안녕하세요. >(///)< 드세요."; $imsi.= $bottom; open(fh,">$filename"); print fh $imsi; close(fh); } |
Mysql 내용
mysql> select * from test; +------+--------+------+-------------+ | id | name | age | tel | +------+--------+------+-------------+ | 1 | 김용일 | 29 | 02-825-xxxx | +------+--------+------+-------------+ 1 row in set (0.03 sec) |
소스
#!/usr/bin/perl print "Content-type:text/html"; #웹에서 html을 볼수 있게 해준다. useMysql; #mysql을 사용한다. $dbh=Mysql->connect("","kbc","",""); #db와 펄을 연결한다. #시간 값을 얻어 낸다. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); #출력할 폼을 작성한다. $date = sprintf("%d-%d-%d",$year += 1900, $mon+1, $mday); print $date, " "; #출력을 한다. #print '$curdate()'; #간단히 시간을 나타내는 방법 $query_string = "select * from test"; # 질의를 변수에 저장한다. $sth=$dbh->query($query_string); #변수를 실행한다. print $sth->fetchrow_array, " "; # 출력을 해준다. |
Sql 을 작성한다.
create table test ( no int default '0' not null auto_increment, name char(10), regdate date, PRIMARY KEY(no) ); |
name_input.htm 을 작성한다.
<form name="form" method="get" action="/cgi-bin/write_db.cgi"> <inputtype="text" name="name" size="10"> <input type="submit" name="ok" value="보내기"> </form> |
cgi 화일을 작성한다.
#!/usr/bin/perl #이문서는 펄문서 임을 나타내준다. %parse = &parse_input; # form, input을 가능하도록 정의를 한다. print "Content-type:text/html"; # html을 사용가능하도록 한다. print "입력 되었습니다. <br>"; use Mysql; #Mysql 을 정의 해준다. $dbh=Mysql->connect("","kedu","root",""); #Mysql을 펄에서 사용가능하도록 연결 시켜준다. connect("", "DB이름", "사용자", "비밀번호") $query_string = "insert into test values('','$parse{name}',curdate())"; # 이름과 시간을 변수에 저장한다. $sth=$dbh->query($query_string); # 실행한다. $query_string = "select * from test"; # 테이블 내용을 변수에 저장한다. $sth=$dbh->query($query_string); # 실행을 한다. while($row = $sth->fetchrow_arrayref) { # 테이블의 마직막 레코드 까지 print "$row->[0] $row->[1] $row->[2]<br>"; # 테이블 내용을 출력 한다. } exit; # 분 문서(펄)의 끝임을 나타내 준다. 이하 함수를 정의 한다. # 밑의 함수는 충분한 학습후 수정하고, 초보자는 그냥 그런가 보다 생각하고 넘어간다. sub parse_input { my ($buffer,@parse,%parse,$key,$value); if($ENV{'REQUEST_METHOD'} eq "GET") { @parse = split(/&/,$ENV{'QUERY_STRING'}); } else { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); @parse = split(/&/,$buffer); } foreach (@parse) { $_=~ tr/+/ /; $_ =~ s/%([dA-Fa-f][dA-Fa-f])/pack("C",hex($1))/eg; ($key,$value) = split(/=/,$_); $parse{$key} = $value; } return %parse; } |
Sql 작성 ( mysql DBNAME < test.tbl )
create table test ( no int default '0' not null auto_increment, id char(10), name char(10), pw char(8), regdate date, regtime time, PRIMARY KEY(no) ); |
check_input.htm 작성
<html> <body> <table> <form name="form" method="post" action=/cgi-bin/access_db.cgi> <tr> <td>아이디 </td> <td><input name=id size=10> <br></td> </tr> <tr> <td>이 름 </td> <td><input name=name size=10> <br></td></tr> <tr> <td>비밀번호</td> <td><input name=pw size=10 type=password> <br></td></tr> <tr> <td>비밀번호확인</td> <td><input name=pw2 size=10 type=password> </td></tr></table> <input type="submit" value="보내기"> </form> </table> </body> </html> |
access_db.cgi 작성(작성후 755 access_db.cgi 를 실행해서 실행모드로 바꾼다.)
#!/usr/bin/perl %parse = &parse_input; use Mysql; $dbh = Mysql->connect("","kedu","root",""); print "Content-type:text/html"; if($parse{id} eq ""){ print "아이디를 입력하지 않았습니다.<br>"; print "아이디를 입력 해주세요.<br>"; } elsif($parse{name} eq "" ){ print "이름을 입력하지 않았습니다.<br>"; print "이름을 입력 해주세요.<br>"; } elsif($parse{pw} eq "" ){ print "비밀번호를 입력하지 않았습니다.<br>"; print "비밀번호를 입력 해주세요.<br>"; } elsif($parse{pw2} eq "" ){ print "비밀번호확인을 입력하지 않았습니다.<br>"; print "비밀번호확인을입력 해주세요.<br>"; } elsif(($parse{id} =~ /^d/) || ($parse{name} =~ /^d/)) { print "첫번째 글짜가 숫자로 되어 있습니다.<br>"; print "첫번째글짜를 문자로 바꾸어 주세요.<br>"; } elsif(®istered_id($parse{id})) { print "이미 있는 아이디 입니다.<br>"; print "다른 아이디를 입력 해주세요.<br>"; } elsif($parse{pw} ne $parse{pw2}) { print "비밀번호가 같지 않습니다. <br>"; print "비밀번호를 다시 입력 해주세요. <br>"; } else { print$parse{id}, "가 입력 되었습니다.<br>"; $query_string = "insert into test values('','$parse{id}','$parse{name}','$parse{pw}', curdate(), curtime())"; my $sth=$dbh->query($query_string); } $query_string = "select * from test"; $sth=$dbh->query($query_string); while($row = $sth->fetchrow_arrayref) { print "$row->[0] $row->[1] $row->[2] $row->[3] $row->[4] $row->[5]<br>"; } exit; sub registered_id { my ($id) = @_; my ($query_string) = "select id from test where id = '$id'"; my ($sth) = $dbh->query($query_string); if($sth -> numrows eq "1") { return 1; } else { return 0; } } sub parse_input { my ($buffer,@parse,%parse,$key,$value); if($ENV{'REQUEST_METHOD'} eq "GET") { @parse = split(/&/,$ENV{'QUERY_STRING'}); } else { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); @parse = split(/&/,$buffer); } foreach (@parse) { $_ =~ tr/+/ /; $_ =~ s/%([dA-Fa-f][dA-Fa-f])/pack("C",hex($1))/eg; ($key,$value) = split(/=/,$_); $parse{$key} = $value; } return %parse; } |