아파치 설정
펄이 설치 되어 있나 한번 봅니다.
# 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;
}
|