5. Perl

5.1. ÆÞ »ç¿ëÇϱâ À§ÇÑ apache, mysql ¼³Á¤

  1. ¾ÆÆÄÄ¡ ¼³Á¤

    ÆÞÀÌ ¼³Ä¡ µÇ¾î ÀÖ³ª Çѹø º¾´Ï´Ù.

    # 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 
            

  2. 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'¸¦ À§¿Í °°Àº ¹æ¹ýÀ¸·Î ¼³Ä¡ÇÑ´Ù.

  3. Å×½ºÆ®

    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
            

5.2. µð·ºÅ丮, È­ÀÏ ¸¸µé±â

µð·ºÅ丮, È­ÀÏ ¸¸µé±â
#!/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); 
}
  

5.3. ½Ã°£ Ãâ·Â¹× Å×ÀÌºí ³»¿ë Ãâ·Â

  1. Mysql ³»¿ë
    mysql> select * from test; 
    +------+--------+------+-------------+ 
    | id | name | age | tel | 
    +------+--------+------+-------------+ 
    | 1 | ±è¿ëÀÏ | 29 | 02-825-xxxx | 
    +------+--------+------+-------------+ 
    1 row in set (0.03 sec) 
          

  2. ¼Ò½º
    #!/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, " "; # Ãâ·ÂÀ» ÇØÁØ´Ù.
           

5.4. À̸§À» ÀÔ·Â¹Þ¾Æ mysql¿¡ ÀúÀåÇÏ°í Ãâ·ÂÇϱâ

  1. Sql À» ÀÛ¼ºÇÑ´Ù.
     create table test ( 
       no int default '0' not null auto_increment, 
       name char(10), 
       regdate date, 
       PRIMARY KEY(no) 
     ); 
           

  2. 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>
           

  3. 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; 
    } 
           

5.5. ÀÔ·Â ¹Þ´Â ºÎºÐÀ» üũ Çϱâ

  1. 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) 
    ); 
           

  2. 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> 
           

  3. 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(&registered_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; 
    }