³Ý½ºÄÉÀÙ ÄíÅ°
³Ý½ºÄÉÀÙ 1.1ÀÌ»óÀÇ ¹öÀüÀº ¼ÒÀ§ ÄíÅ°¶ó´Â °ÍÀ» Áö¿øÇÑ´Ù. ÀÌ Äí±â´Â ºê·Î¿ìÀú ¼¼¼ÇÁ¤º¸¸¦ À¯ÁöÇϱâÀ§ÇØ °í¾ÈµÈ °ÍÀÌ´Ù. CGI.pmÀº ÄíÅ°¸¦ Áö¿øÇÏ´Â ¿©·¯°¡Áö ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ´Ù.
Äí±â´Â CGI ÁúÀÇ ¹®ÀÚ¿³»ÀÇ ¸Å°³º¯¼öó·³ name=value ½ÖÀ¸·Î ±¸¼ºµÈ´Ù. CGI ½ºÅ©¸³Æ®´Â Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ ÄíÅ°¸¦ »ý¼ºÇÏ°í À̵éÀ» HTTP Çì´õ¸¦ ÅëÇØ ºê·Î¿ìÀú·Î Àü¼ÛÇÑ´Ù. ºê·Î¿ìÀú´Â ƯÁ¤ À¥ ¼¹ö¿¡ ¼ÓÇÑ ÄíÅ° ¸ñ·ÏÀ» À¯ÁöÇÏ°í ÀÖ´Ù°¡ À̾îÁö´Â ¼¼¼Çµ¿¾È CGI ½ºÅ©¸³Æ®¿¡ À̵é ÄíÅ°¸¦ ¸®ÅÏÇÑ´Ù.
¹Ýµå½Ã ÇÊ¿äÇÑ name=value ½Ö ÀÌ¿Ü¿¡ °¢°¢ÀÇ ÄíÅ°´Â Ãß°¡ÀûÀÎ ¿©·¯ °¡Áö ¼Ó¼ºÀ» °¡Áú ¼ö ÀÖ´Ù.
- ¸¸·á±â°£(expires)
ÀÌ °ÍÀº ÄíÅ°ÀÇ ¸¸·á ½ÃÁ¡À» Áö½ÃÇÏ´Â ½Ã°£/³¯ÀÚ ¹®ÀÚ¿(Ư¼öÇÑ GMT Çü½Ä)ÀÌ´Ù. ³Ý½ºÄÉÀÙÀ» Á¾·áÇÏ°í ´Ù½Ã ½ÃÀÛÇÒ Áö¶óµµ ÄíÅ°´Â ¸¸·áÀÏ¿¡ µµ´ÞÇÒ ¶§±îÁö À¯ÁöµÇ¸ç CGI ½ºÅ©¸³Æ®·Î ¸®ÅϵȴÙ. ¸¸·áÀÏÀÌ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é ÄíÅ°´Â ³Ý½ºÄÉÀÙÀ» Á¾·áÇÒ ¶§±îÁö¸¸ À¯È¿ÇÏ°Ô µÈ´Ù.
Âü°í:
³Ý½ºÄÉÀÙÀÇ Äí±â´Â Netscape(Netscape 4.0¹Ì¸¸)Æú´õ³ª user/userid(Netscape 4.0ÀÌ»ó) Æú´õÀÇ cookies.txt¶ó´Â ÆÄÀÏ·Î ÀúÀåµÈ´Ù.
- µµ¸ÞÀÎ(domain)
ÀÌ °ÍÀº ÄíÅ°°¡ À¯È¿ÇÑ ºÎºÐ ¶Ç´Â ¿ÏÀüÇÑ µµ¸ÞÀÎ ¸íÀÌ´Ù. ºê·Î¿ìÀú´Â ºÎºÐ µµ¸ÞÀÎ ¸íÀÌ ÀÏÄ¡Çϴ ȣ½ºÆ®¿¡´ëÇØ ÄíÅ°¸¦ ¸®ÅÏÇÑ´Ù. ¿¹¸¦µé¾î µµ¸ÞÀÎ À̸§À» ".soongsil.ac.kr"·Î ÁöÁ¤ÇÏ¸é ³Ý½ºÄÉÀÙÀº ".soongsil.ac.kr."³»¿¡ Á¸ÀçÇÏ´Â ÄÄÇ»ÅÍ(comp.mailx2.com, syscon.soongsil.ac.kr, cupid.soongsil.ac.kr µî)¿¡¼ ±âµ¿µÇ´Â À¥¼¹ö¿¡¸¸ Äí±â¸¦ ¸®ÅÏÇÑ´Ù. µµ¸ÞÀÎ ¸íÀº Àû¾îµµ µÎ°³ÀÌ»óÀÇ ¸¶Ä§Ç¥(.)¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ÀÌ °ÍÀº ".kr"°ú °°ÀÌ ÃÖ»óÀ§ µµ¸ÞÀÎÀ» »ç¿ëÇÏÁö ¸øÇÏ°ÔÇϱâ À§ÇÑ °ÍÀÌ´Ù. ¾î¶°ÇÑ µµ¸ÞÀεµ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é ºê·Î¿ìÀú´Â ÄíÅ°¸¦ ¼³Á¤ÇÑ ¼¹ö¿¡¸¸ ÄíÅ°¸¦ ¸®ÅÏÇÑ´Ù.
- °æ·Î(path)
Äí±â¿¡ °æ·Î ¼Ó¼ºÀ» Á¦°øÇϸé ÄíÅ°¸¦ ¸®ÅÏÇϱâÀü¿¡ ½ºÅ©¸³Æ®ÀÇ URLÀ» °Ë»çÇÑ´Ù. ¿¹¸¦µé¾î "/cgi-bin"À̶ó´Â °æ·Î¸¦ ÁöÁ¤Çϸé "/cgi-bin/tally.cgi", "/cgi-bin/order.cgi"°ú "/cgi-bin/customer_service/complain.cgi"¶ó´Â ½ºÅ©¸³Æ® °¢°¢¿¡ ´ëÇؼ´Â ÄíÅ°°¡ ¸®ÅϵÇÁö¸¸ "/cgi-private/site_admin.cgi" ½ºÅ©¸³Æ®¿¡´Â ÄíÅ°°¡ ¸®ÅϵÇÁö ¾Ê´Â´Ù. ±âº»ÀûÀ¸·Î °æ·Î´Â "/"·Î ¼³Á¤µÇ¸ç µû¶ó¼ ÇØ´ç µµ¸ÞÀÎÀÇ ¸ðµç CGI ½ºÅ©¸³Æ®·Î Äí±â°¡ Àü¼ÛµÈ´Ù.
- secure
"secure" ¼Ó¼ºÀÌ ¼³Á¤µÇ¸é ÄíÅ°´Â SSL°ú °°Àº º¸¾È Åë½Å·Î¸¦ ÅëÇØ CGI ¿äûÀÌ ÀÌ·ç¾î Áö´Â °æ¿ì¿¡¸¸ ½ºÅ©¸³Æ®·Î ÄíÅ°¸¦ Àü¼ÛÇÑ´Ù.
³Ý½ºÄÉÀÙ Äí±â¿¡´ëÇÑ ÀÎÅÍÆäÀ̽º´Â cookie() ¸Þ¼ÒµåÀÌ´Ù.
$cookie = $query->cookie(-name=>'sessionID',
-value=>'xyzzy',
-expires=>'+1h',
-path=>'/cgi-bin/database',
-domain=>'.soongsil.ac.kr',
-secure=>1);
print $query->header(-cookie=>$cookie);
cookie()´Â »õ·Î¿î ÄíÅ°¸¦ »ý¼ºÇÑ´Ù. cookie()ÀÇ ¸Å°³º¯¼ö´Â ´ÙÀ½°ú °°´Ù.
- -name
- Äí±âÀÇ À̸§(¹Ýµå½Ã ÇÊ¿ä). ÀÌ°ÍÀº ÀÓÀÇÀÇ ¹®ÀÚ¿ÀÏ ¼ö ÀÖ´Ù. ºñ·Ï ³Ý½ºÄÉÀÙÀÌ °ø¹éÀÌ ¾Æ´Ñ ¿µ¹®ÀÚ¿Í ¼ýÀÚ·Î Á¦ÇÑÇßÁö¸¸ CGI.pmÀº ¹èÈÄ¿¡¼ ÄíÅ°ÀÇ Æ¯¼ö¹®ÀÚ¸¦ ÀÚµ¿À¸·Î »ðÀÔ, Á¦°ÅÇÔÀ¸·Î¼ ÀÌ·¯ÇÑ Á¦ÇÑÀ» ±Øº¹Çß´Ù.
- -value
- Äí±âÀÇ °ª. ÀÌ °ÍÀº ÀÓÀÇÀÇ ½ºÄ®¶ó, ¹è¿, ½ÉÁö¾î´Â ¿¬°ü¹è¿ÀÏ ¼ö ÀÖ´Ù. ¿¹¸¦µé¾î ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î Àüü ¿¬°ü¹è¿À» ÀúÀåÇÒ ¼ö ÀÖ´Ù.
$cookie=$query->cookie(-name=>'family information',
-value=>\%childrens_ages);
- -path
- ÄíÅ°°¡ À¯È¿ÇÑ ºÎºÐ °æ·Î Á¤º¸(Á¶°ÇºÎ)·Î¼ À§¿¡¼ ¼³¸íÇß´Ù.
- -domain
- ÄíÅ°°¡ À¯È¿ÇÑ ºÎºÐ µµ¸ÞÀÎ Á¤º¸(Á¶°ÇºÎ)·Î¼ À§¿¡¼ ¼³¸íÇß´Ù.
- -expires
- ÄíÅ°ÀÇ ¸¸·áÀÏ(Á¶°ÇºÎ). Çü½ÄÀº header() ¸Þ¼Òµå¿¡ ´ëÇÑ Àý¿¡¼ ¼³¸íÇß´Ù.
"+1h" Áö±ÝºÎÅÍ Çѽð£
- -secure
- ÂüÀ¸·Î ¼³Á¤µÇ¸é ÀÌ ÄíÅ°´Â º¸¾È SSL ¼¼¼ÇÀ» ÅëÇؼ¸¸ Àü¼ÛµÈ´Ù.
cookie()
¿¡ÀÇÇØ »ý¼ºµÈ ÄíÅ°´Â
<A HREF="perl-cgipm3.htm#CREATING_A_STANDARD_HTTP_HEADER_">header()</A>
¸Þ¼Òµå¿¡ÀÇÇØ ¸®ÅÏµÈ ¹®ÀÚ¿³»¿¡ HTTP Çì´õ·Î º´ÇյȴÙ.
print $query->header(-cookie=>$my_cookie);
´ÙÁß ÄíÅ°¸¦ »ý¼ºÇϱâ À§ÇØ
<A HREF="perl-cgipm3.htm#CREATING_A_STANDARD_HTTP_HEADER_">header()</A>
¿¡ ¹è¿À» Àü´ÞÇÏ¸é µÈ´Ù.
$cookie1 = $query->cookie(-name=>'riddle_name',
-value=>"½ºÇÎÅ©½ºÀÇ ¼ö¼ö²²³¢");
$cookie2 = $query->cookie(-name=>'answers',
-value=>\%answers);
print $query->header(-cookie=>[$cookie1,$cookie2]);
ÄíÅ°¸¦ º¹¿øÇϱâÀ§ÇØ -value ¸Å°³º¯¼ö ¾øÀÌ
cookie()
¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.
use CGI;
$query = new CGI;
%answers = $query->cookie(-name=>'answers');
# $query->cookie('answers') ¿ª½Ã Àß µ¿ÀÛÇÑ´Ù
Äí±â¿Í CGI À̸§°ø°£Àº ºÐ¸®µÇ¾î ÀÖ´Ù. 'answers'¶ó´Â ±â¸í ¸Å°³º¯¼ö¿Í 'answers'¶ó´Â ÄíÅ°¸¦ °¡Áö°í ÀÖ´Ù¸é À̵éÀº
param()
°ú
cookie()
¿¡ÀÇÇØ µ¶¸³ÀûÀ¸·Î ¸®ÅϵȴÙ. ±×·¯³ª CGI ¸Å°³º¯¼ö¸¦ cookie·Î º¯È¯ÇÏ°í, cookie¸¦ CGI ¸Å°³º¯¼ö·Î º¯È¯ÇÏ´Â °ÍÀº ½±´Ù.
# CGI ¸Å°³º¯¼ö¸¦ ÄíÅ°·Î º¯È¯
$c=$q->cookie(-name=>'answers',-value=>[$q->param('answers')]);
# ²¨²Ù·Î
$q->param(-name=>'answers',-value=>[$q->cookie('answers')]);
ÁÖÀÇ:
³Ý½ºÄÉÀÙ ÄíÅ°¿¡´ëÇÑ ¸î¸î ¹®¼ÈµÇÁö ¾ÊÀº Á¦ÇÑÀÌ ÀÖ´Ù. Àû¾îµµ ³Ý½ºÄÉÀÙ 2.01¿¡¼ ÇÊÀÚ´Â Çѹø¿¡ 3°³ ÀÌ»óÀÇ ÄíÅ°¸¦ ¼³Á¤ÇÒ ¼ö ¾ø¾ú´Ù. ¶ÇÇÑ ÄíÅ°ÀÇ ±æÀ̵µ Á¦ÇѵȴÙ. ¸¹Àº ¾çÀÇ Á¤º¸¸¦ ÀúÀåÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é À¯ÀÏÇÑ ¼¼¼Ç ID¸¦ »ý¼ºÇÏ°í ÀÌ °ÍÀ» ÄíÅ°¿¡ ÀúÀåÇÑ ÈÄ ÀÌ ¼¼¼Ç ID¸¦ ÀÌ¿ëÇؼ ¼¹öÃøÀÇ ÆÄÀÏÀ̳ª DB¿¡ Á¤º¸¸¦ ÀúÀåÇÏ´Â °ÍÀÌ º¸´Ù ³ªÀº ¹æ¹ýÀÏ °ÍÀÌ´Ù.
ÄíÅ°¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸±â À§Çؼ´Â cookie.cgi¸¦ º»´Ù.
1 : #!/usr/local/bin/perl
2 :
3 : use CGI qw(:standard);
4 :
5 : @ANIMALS=sort qw/»çÀÚ È£¶ûÀÌ °õ »õ³¢µÅÁö È£Àú ¾Þ¹«»õ ¾ó·è¸» ¾Ï¼Ò ŸÁ¶
6 : ¿¡¹Â ¸ð¾Æ ¿°¼Ò Á·Á¦ºñ ¾ßÅ© ´ß ¾ç ÇÏÀÌ¿¡³ª µµµµ ³ðÆÎÀÌ
7 : ´Ù¶÷Áã Áã »ý¾ÓÁã °í½¿µµÄ¡ ³Ê±¸¸® ºñºñ Ä»°¡·ç Çϸ¶
8 : ±â¸°/;
9 :
10 : # ÄíÅ°·ÎºÎÅÍ ÀÌÀü µ¿¹°À» º¹¿øÇÑ´Ù.
11 : # ÄíÅ°´Â µ¿¹°À̸§À» Å°·Î µ¿¹°ÀÇ ¼ö¸¦ °ªÀ¸·ÎÇÑ
12 : # ¿¬°ü¹è¿¿¡ ÀúÀåµÈ´Ù.
13 : %zoo = cookie('animals');
14 :
15 : # 'new_animal' ¸Å°³º¯¼ö·ÎºÎÅÍ »õ·Î¿î µ¿¹°À» º¹±¸ÇÑ´Ù.
16 : @new = param('new_animals');
17 :
18 : # ¾×¼ÇÀÌ 'add'¸é »õ·Î¿î µ¿¹°À» µ¿¹°¿ø¿¡ Ãß°¡ÇÑ´Ù. ±×·¸Ä¡ ¾ÊÀ¸¸é
19 : # À̵éÀ» Á¦°ÅÇÑ´Ù.
20 : foreach (@new) {
21 : if (param('action') eq 'Ãß°¡') {
22 : $zoo{$_}++;
23 : } elsif (param('action') eq '»èÁ¦') {
24 : $zoo{$_}-- if $zoo{$_};
25 : delete $zoo{$_} unless $zoo{$_};
26 : }
27 : }
28 :
29 : # »õ·Î¿î µ¿¹°À» ÀÌÀü ¸ñ·Ï¿¡ Ãß°¡ÇÏ°í À̵éÀ» ÄíÅ°¿¡ µÐ´Ù.
30 : $the_cookie = cookie(-name=>'animals',
31 : -value=>\%zoo,
32 : -expires=>'+1h');
33 :
34 : # ÄíÅ°¿Í ¸¸·ùÀÏÀ» º´ÇÕÇÑ Çì´õ¸¦ Ãß·ÂÇÑ´Ù.
35 : print header(-cookie=>$the_cookie);
36 :
37 : # HTML ¹®¼¸¦ ¸¸µç´Ù.
38 : print start_html('µ¿¹° »ç³É');
39 :
40 : print <<EOF;
41 : <h1>µ¿¹°»ç³É</h1>
42 : µ¿¹°¿ø¿¡ Ãß°¡ÇÏ·Á´Â µ¿¹°À» ¼±ÅÃÇÏ°í "Ãß°¡"¹öÆ°À» Ŭ¸¯ÇÑ´Ù. Çѽ𣠳»¿¡
´Ù½Ã ÀÌ ÆäÀÌÁö·Î µ¹¾Æ¿Í º¸¸é µ¿¹°¿øÀÇ µ¿¹° ¸ñ·Ï º¹±¸µÉ °ÍÀÌ´Ù. ½ÉÁö¾î
³Ý½ºÄÉÀÙÀ» ¿ÏÀüÈ÷ Á¾·áÇÒ ¼öµµ ÀÖ´Ù.
43 :
44 : <p>
45 : µ¿ÀÏÇÑ µ¿¹°À» ¿©·¯¹ø ¸ñ·Ï¿¡ Ãß°¡Ç϶ó.
46 :
47 : <p>
48 : <em>ÀÌ ½ºÅ©¸³Æ®´Â ³Ý½ºÄÉÀÙ 2.0 ÀÌ»ó, M$IE 3.0À̻󿡼¸¸ µ¿ÀÛÇÑ´Ù.</em>
49 :
50 : <p>
51 : <center>
52 : <table border>
53 : <tr><th>Ãß°¡/»èÁ¦<th>ÇöÀç ¸ñ·Ï
54 : EOF
55 : ;
56 :
57 : print "<tr><td>",start_form;
58 : print scrolling_list(-name=>'new_animals',
59 : -values=>[@ANIMALS],
60 : -multiple=>1,
61 : -override=>1,
62 : -size=>10),"<br>";
63 : print submit(-name=>'action',-value=>'»èÁ¦'),
64 : submit(-name=>'action',-value=>'Ãß°¡');
65 : print end_form;
66 :
67 : print "<td>";
68 : if (%zoo) { # Ç¥¸¦ ¸¸µç´Ù
69 : print "<ul>\n";
70 : foreach (sort keys %zoo) {
71 : print "<li>$zoo{$_} $_\n";
72 : }
73 : print "</ul>\n";
74 : } else {
75 : print "<strong>µ¿¹°¿øÀÌ ºñ¾ú½À´Ï´Ù.</strong>\n";
76 : }
77 : print "</table></center>";
78 :
79 : print <<EOF;
80 : print end_html;
½ÇÇà°á°ú
cookie.cgi
Äí±â¿¡´ëÇÑ Ãß°¡ÀûÀÎ Á¤º¸´Â Äí±âÀ» º¸±â¹Ù¶õ´Ù.
³Ý½ºÄÉÀÙÀÇ ÇÁ·¹ÀÓ »ç¿ëÇϱâ
CGI.pmÀº ³Ý½ºÄÉÀÙÀÇ ÇÁ·¹ÀÓÀ» »ç¿ëÇؼ ºê·Î¿ìÀúÀÇ ¿©·¯ ÇÁ·¹ÀÓ¿¡ HTML ¹®¼¸¦ ¾²´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÇÁ·Î±×·¥ÀûÀ¸·Î »õ·Î¿î ÇÁ·¹ÀÓÀ» Á¤ÀÇÇÏ´Â ¼¼°¡Áö ±â¹ýÀÌ ÀÖ´Ù.
- <Frameset> ű׷Π¹®¼¸¦ »ý¼º
HTTP Çì´õ¸¦ ¾´ ÈÄ,
<A HREF="perl-cgipm3.htm#CREATING_THE_HTML_DOCUMENT_HEADE">start_html()</A>
¸¦ È£ÃâÇÔÀ¸·Î¼ Ç¥ÁØ ¹®¼¸¦ »ý¼ºÇÏ´Â ´ë½Å¿¡ ÆäÀÌÁö¿¡´ëÇÑ ÇÁ·¹ÀÓÀ» Á¤ÀÇÇÏ´Â <FRAMESET> ¹®¼¸¦ »ý¼ºÇÑ´Ù. ÇÁ·¹ÀÓ °¢°¢¿¡´ëÇÑ SRC·Î¼ ½ºÅ©¸³Æ®
(Àû´çÇÑ ¸Å°³º¯¼ö¿Í ÇÔ²²)¸¦ ÁöÁ¤ÇÑ´Ù.
CGI.pm¿¡¼´Â <FRAMESET> ¼½¼ÇÀ» »ý¼ºÇÏ´Â ¾î¶°ÇÑ °Íµµ Áö¿øÇÏÁö ¾ÊÁö¸¸ HTML·Î ¾ÆÁÖ °£´ÜÈ÷ »ý¼ºÇÒ ¼ö ÀÖ´Ù. º¸´Ù ÀÚ¼¼ÇÑ °ÍÀº ³Ý½ºÄÉÀ٠ȨÆäÀÌÁöÀÇ ÇÁ·¹ÀÓ¿¡´ëÇÑ ¹®¼¸¦ º¸±â ¹Ù¶õ´Ù.
<A HREF="http://home.netscape.com/assist/net_sites/frames.html">http://home.netscape.com/assist/net_sites/frames.html</A> <a href='http://home.netscape.com/assist/net_sites/frames.html' target='_blank' style='border-bottom: none'><IMG src='/images/external.png' align='middle' border=0 style='border-bottom: 0'></a>
- HTTP Çì´õ³»¿¡ ¹®¼¿¡´ëÇÑ ¸ñÀû âÀ» ÁöÁ¤
<A HREF="perl-cgipm3.htm#CREATING_A_STANDARD_HTTP_HEADER_">header()</A>
¸Þ¼Òµå¿¡ -target ¸Å°³º¯¼ö¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù.
print $q->header(-target=>'ResultsWindow');
ÀÌ °ÍÀ¸·Î ³Ý½ºÄÉÀÙÀº ÇÁ·¹ÀÓ À̸§ÀÌ "ResultsWindow"ÀÎ ÇÁ·¹ÀÓÀ¸·Î ½ºÅ©¸³Æ®ÀÇ Ãâ·ÂÀ» ÀаԵȴÙ. ¸¸¾à ÀÌ À̸§ÀÇ ÇÁ·¹ÀÓÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é ³Ý½ºÄÉÀÙÀº »õ·Î¿î âÀ» ¿°í ÀÌ Ã¢À¸·Î ½ºÅ©¸³Æ®ÀÇ °á°ú¸¦ Àд´Ù. ¸ñÀû âÀÇ À̸§Àº ´Ù¾çÇÑ ÇüÅ·Π»ç¿ëÇÒ ¼ö ÀÖ´Ù. º¸´Ù ÀÚ¼¼ÇÑ °ÍÀº ³Ý½ºÄÉÀ٠ȨÆäÀÌÀÇ ÇÁ·¹ÀÓ¿¡´ëÇÑ ¹®¼ ¸¦ º¸±â ¹Ù¶õ´Ù.
- <FORM> ű׿¡¼ ¹®¼ÀÇ ¸ñÀûâÀ» ÁöÁ¤
FORM ű׿¡¼ ÀÐÇôÁú ÇÁ·¹ÀÓÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. CGI.pm¿¡¼ ÀÌ °ÍÀº ´ÙÀ½°ú °°Àº Çü½ÄÀ» °®´Â´Ù.
print $q->startform(-target=>'ResultsWindow');
½ºÅ©¸³Æ®°¡ Æû¿¡ÀÇÇØ ´Ù½Ã È£ÃâµÉ ¶§ ÀÌ ½ºÅ©¸³Æ®ÀÇ Ãâ·ÂÀº ÇÁ·¹ÀÓ À̸§ÀÌ "ResultsWindow"ÀΠâ¿¡ Ãâ·ÂµÉ °ÍÀÌ´Ù. ÇØ´ç ÇÁ·¹ÀÓÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é »õ·Î¿î âÀÌ »ý¼ºµÉ °ÍÀÌ´Ù.
frameset.cgiÀº ÀÔ·ÂÆû°ú ±× ÀÀ´äÀ» ÀÎÁ¢ ÇÁ·¹ÀÓÀ¸·Î Àü¼ÛÇÏ´Â ¹æ¹ýÀ» º¸ÀÌ°í ÀÖ´Ù.
1 : #!/usr/local/bin/perl
2 :
3 : use CGI;
4 : $query = new CGI;
5 : print $query->header;
6 : $TITLE="ÇÁ·¹ÀÓ¼ÂÀÇ ¿¹";
7 :
8 : # È£ÃâÀ» ±¸ºÐÇϱâÀ§ÇØ °æ·ÎÁ¤º¸¸¦ »ç¿ëÇÑ´Ù.
9 : #
10 : # (1) ÇÁ·¹ÀÓ¼ÂÀ» »ý¼ºÇÑ´Ù
11 : # (2) ÁúÀÇÆûÀ» »ý¼ºÇÑ´Ù.
12 : # (3) ÁúÀÇ °æ°ú¸¦ »ý¼ºÇÑ´Ù.
13 :
14 : $path_info = $query->path_info;
15 :
16 : # ¾î¶°ÇÑ °æ·ÎÁ¤º¸µµ Á¦°øµÇÁö ¾ÊÀ¸¸é ÇÁ·¹ÀÓ¼ÂÀ» »ý¼ºÇÑ´Ù.
17 : if (!$path_info) {
18 : &print_frameset('ÇÁ·¹ÀÓ¼ÂÀÇ ½ÃÇè');
19 : exit 0;
20 : }
21 :
22 : # °æ·ÎÁ¤º¸°¡ Á¸ÀçÇϸé ÁúÀÇ ÆûÀ̳ª ÁúÀÇ °á°ú¸¦ »ý¼ºÇÑ´Ù.
23 : &print_html_header;
24 : &print_query if $path_info=~/query/;
25 : &print_response if $path_info=~/response/;
26 : &print_end;
27 :
28 : # ÇÁ·¹ÀÓ ¼ÂÀ» »ý¼ºÇÑ´Ù.
29 : sub print_frameset {
30 : $script_name = $query->script_name;
31 : print <<EOF;
32 : <html><head><title>$TITLE</title></head>
33 : <frameset cols="300,*" FRAMEBORDER="No">
34 : <frame src="$script_name/query" name="query">
35 : <frame src="$script_name/response" name="response">
36 : </frameset>
37 : EOF
38 : ;
39 : exit 0;
40 : }
41 :
42 : sub print_html_header {
43 : print $query->start_html($TITLE);
44 : }
45 :
46 : sub print_end {
47 : print $query->end_html;
48 : }
49 :
50 : sub print_query {
51 : $script_name = $query->script_name;
52 : print "<H1>ÁúÀÇ</H1>\n";
53 : print $query->startform(-action=>"$script_name/response",-TARGET=>"response");
54 : print "À̸§ÀÌ ¸ð´Ï? ",$query->textfield('name');
55 : print "<P>¿øÇÏ´Â °ÍÀº ¸ð´Ï?<P>",
56 : $query->checkbox_group(-name=>'words',
57 : -values=>['¿©ÀÚ','¾Æ³»','¿©µ¿»ý','¿©ÀÚ¾Ö']);
58 :
59 : print "<P>ÁÁ¾ÆÇÏ´Â »öÀº? ",
60 : $query->popup_menu(-name=>'color',
61 : -values=>['»¡°£»ö','³ì»ö','ÆĶõ»ö','²ÀÁö»ö']),
62 : "<P>";
63 : print $query->submit('º¸³»±â');
64 : print $query->endform;
65 : }
66 :
67 : sub print_response {
68 : print "<H1>ÁúÀÇ°á°ú</H1>\n";
69 : unless ($query->param) {
70 : print "<b>Â¥½Ä, ¹°¾îº¸¶ó´Ï±î.</b>";
71 : return;
72 : }
73 : print "´Ï À̸§: <EM>",$query->param(name),"</EM>\n";
74 : print "<P>¿øÇÏ´Â °Í: <EM>",join(", ",$query->param(words)),"</EM>\n";
75 : print "<P>¿øÇÏ´Â »ö±ò: <EM>",$query->param(color),"</EM>\n";
76 : }
½ÇÇà°á°ú
frameset.cgi
Á¾¼Ó ¼½Ä ÆÄÀÏ(CSS)ÀÇ Á¦ÇÑÀûÀÎ Áö¿ø
CGI.pmÀº HTML 3ÀÇ Á¾¼Ó ¼½Ä ÆÄÀÏ(CSS)¸¦ Á¦ÇÑÀûÀ¸·Î Áö¿øÇÑ´Ù. ¼½ÄÀ» ÀÚ½ÅÀÇ ¹®¼¿¡ º´ÇÕÇϱâÀ§ÇØ
<A HREF="perl-cgipm3.htm#CREATING_THE_HTML_DOCUMENT_HEADE">start_html()</A>
¸Þ¼Òµå¿¡
-style ¸Å°³º¯¼ö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸Å°³º¯¼öÀÇ °ªÀº <STYLE> ¼½¼Ç¿¡ Á÷Á¢ º´ÇÕÇÏ·Á´Â °æ¿ì¿¡´Â ½ºÄ®¶óÀ̸ç, ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â Çؽ¬ ÂüÁ¶À̾î¾ß ÇÑ´Ù. ÈÄÀÚÀÇ °æ¿ì¿¡ Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ
-src³ª
-code¸¦ °®´Â Çؽ¬¸¦ Á¦°øÇØ¾ß ÇÑ´Ù.
-src´Â ¿ÜºÎ ¼½Ä ÆÄÀÏÀÇ URLÀ» ÁöÁ¤ÇÒ ¶§ »ç¿ëÇϸç
-code´Â <STYLE> ¼½¼ÇÀ¸·Î º´ÇÕµÉ ½ºÄ®¶ó °ªÀ» ÁöÁ¤ÇÒ ¶§ »ç¿ëÇÑ´Ù.
-code ³»ÀÇ ¼½Ä Á¤ÀÇ´Â
-src³»ÀÇ µ¿ÀÏÇÑ À̸§º¸´Ù ¿ì¼±¼øÀ§°¡ ³ô´Ù.
-style¿¡ÀÇÇØ ÁöÁ¤µÈ Çؽ¬¿¡ -type ¸Å°³º¯¼ö¸¦ Ãß°¡ÇÔÀ¸·Î¼ ¼½ÄÀÇ Çü½ÄÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¼½ÄÀº ±âº»ÀûÀ¸·Î 'text/css'°¡ µÈ´Ù.
¹®¼ÀÇ ¸öü³»¿¡¼ ¼½ÄÀ» ÂüÁ¶ÇϱâÀ§ÇØ ÀÓÀÇÀÇ HTML ű×(¸Þ¼Òµå)¿¡ -class ¸Å°³º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
print h1({-class=>'Fancy'},'Welcome to DoA's World!!!');
¶Ç´Â ÁøÇàÁß¿¡ ½ºÅ¸ÀÏÀ» Á¤ÀÇÇϱâ À§ÇØ -style ¸Å°³º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
print h1({-style=>'Color: red;'},'³Ê Á×¾îºÁ¶ól');
ÅؽºÆ®ÀÇ ÀϺκп¡ ¼½ÄÀ» Àû¿ëÇϱâ À§ÇØ »õ·Î¿î span()¿Í div() ű׸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
print span({-style=>'Color: red;'},
h1('Áö¿Á¿¡ ¿Â°ÍÀ» ȯ¿µÇÑ´Ù.'),
"Áö±ÝºÎÅÍ Á×Áöµµ »ìÁöµµ ¸øÇÏ´Â °íÅëÀ» ¸Àº¸°Ô µÉ °ÍÀÌ´Ù. ¿ìÇÏÇÏ~~~"
);
ÁÖÀÇ:
span()¿Í div() ¸Þ¼Òµå¸¦ »ç¿ëÇϱâÀ§Çؼ´Â ":html3" Á¤ÀǸ¦ °¡Á®¿Í¾ß ÇÑ´Ù. CSS¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹°¡ ¿©±â ÀÖ´Ù. CSS¿¡´ëÇÑ º¸´Ù ÀÚ¼¼ÇÑ Á¤º¸´Â µµ¾ÆÀÇ CSS °Á¸¦ º¸±â¹Ù¶õ´Ù.
1 : #!/usr/local/bin/perl
2 :
3 : use CGI qw/:standard :html3/;
4 :
5 : # ÀÌ ¼½ÄÀº ÆäÀÌÁö¿¡ Á÷Á¢ º´ÇյȴÙ.
6 : $newStyle=<<END;
7 : <!--
8 : P.Tip {
9 : margin-right: 50pt;
10 : margin-left: 50pt;
11 : color: red;
12 : }
13 : P.Alert {
14 : font-size: 30pt;
15 : font-family: sans-serif;
16 : color: red;
17 : }
18 : -->
19 : END
20 :
21 : print header();
22 : print start_html( -title=>'¼½ÄÀ» ÀÌ¿ëÇÑ CGI',
23 : -style=>{-src=>'http://qaos.com/style.css',
24 : -code=>$newStyle}
25 : );
26 : print h1('¼½ÄÀ» ÀÌ¿ëÇÑ CGI'),
27 : p({-class=>'note'},
28 : "CSS¸¦ »ç¿ëÇÏ¸é ¹®¼´Â ÈξÀ Àб⠽¬¿öÁö¸ç ÀÛ¼ºÇϱ⠽¬¿öÁø´Ù!"),
29 : span({-style=>'color: magenta'},
30 : "À½, ÇÏÇÏÇÏ~~`",
31 : p({-class=>'tip'}),
32 : "ÁøÂ¥·Î ±×·¸Ä¡!",
33 : p({-class=>'alert'}),
34 : "¾Æ´Ï¶ó°í »ý°¢ÇÏ´Ï?"
35 : );
36 : print end_html;
½ÇÇà°á°ú
css.cgi
NPH ½ºÅ©¸³Æ® »ç¿ëÇϱâ
NPH(Non-Parsed-Header) ½ºÅ©¸³Æ®´Â ¿ÏÀüÇÑ HTTP Çì´õ¸¦ Á÷Á¢ ºê·Î¿ìÀú·Î Àü¼ÛÇÔÀ¸·Î¼ ¼¹ö¸¦ ¿ÏÀüÈ÷ ¿ìȸÇÏ´Â ±â¹ýÀÌ´Ù. ÀÌ °ÍÀº ´Ù¼Ò ¼º´É»óÀÇ ÀÕÁ¡ÀÌ ÀÖÁö¸¸ ÁÖ·Î ¼¹ö¿¡ÀÇÇØ Á÷Á¢ Áö¿øÇÏÁö ¾Ê´Â HTTP È®Àå(¼¹ö ¹Ð±â¿Í PICS Çì´õ¿Í °°Àº)ÀÇ ÀÕÁ¡À» ÃëÇϱâ À§ÇØ »ç¿ëÇÑ´Ù.
¼¹öµéÀº NPH CGI¸¦ ¼³°èÇÒ ¼ö ÀÖ´Â ´Ù¾çÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ¸¹Àº Unix ¼¹ö´Â ½ºÅ©¸³Æ®ÀÇ À̸§ÀÌ "nph-"·Î ½ÃÀÛÇÏ´Â Áö¸¦ Á¶»çÇÑ´Ù. ¹Ý´ë·Î ¸ÅŲÅä½ÃÀÇ WebSTAR ¼¹ö¿Í Money$oftÀÇ IIS¼¹ö´Â ½ºÅ©¸³Æ® Ãâ·ÂÀÇ Ã¹ ÇàÀ» Á¶»çÇÔÀ¸·Î¼ NPH ½ºÅ©¸³Æ®ÀÎÁö ¾Æ´ÑÁö¸¦ °áÁ¤ÇÑ´Ù.
CGI.pmÀº Ưº°ÇÑ NPH ¸ðµå·Î NPH ½ºÅ©¸³Æ®¸¦ Áö¿øÇÑ´Ù. ÀÌ ¸ðµå¿¡ ÀÖÀ¸¸é¼
<A HREF="perl-cgipm3.htm#CREATING_A_STANDARD_HTTP_HEADER_">header()</A>
¿Í
<A HREF="perl-cgipm3.htm#GENERATING_A_REDIRECTION_HEADER">redirect()</A>
¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °æ¿ì CGI.pmÀº ÇÊ¿äÇÑ Ãß°¡ÀûÀÎ Çì´õÁ¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
Money$oftÀÇ IIS´Â NPH ¸ðµå¸¦ ÇÊ¿ä·Î ÇÑ´Ù. 2.30 ÆÇ¿¡¼Ã³·³ CGI.pmÀº ÀÚµ¿ÀûÀ¸·Î ½ºÅ©¸³Æ®°¡ IISÇÏ¿¡¼ ±âµ¿µÇ´ÂÁö¸¦ °ËÃâÇÏ°í ½º½º·Î ÀÌ ¸ðµå·Î Ãâ·ÂÇÑ´Ù. µû¶ó¼ »ç¿ëÀÚ°¡ µû·Î ÀÌ ¸ðµå¸¦ ¼³Á¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù.
CGI.pmÀ» NPH ¸ðµå¿¡¼ »ç¿ëÇÏ´Â ¿©·¯°¡Áö ¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù.
- use ¹®
- °£´ÜÇÏ°Ô ½ºÅ©¸³Æ®·Î °¡Á®¿Ã ½Éº¼ ¸ñ·Ï¿¡ "-nph" ÇÁ¶ó±×¸¶¸¦ Ãß°¡ÇÑ´Ù.
use CGI qw(:standard -nph)
- nph() ¸Þ¼Òµå È£Ãâ
- use CGI;¸¦ »ç¿ëÇÑ ÈÄ ÀÓÀÇÀÇ ÁöÁ¡¿¡¼ "0"ÀÌ¾Æ´Ñ ¸Å°³º¯¼ö·Î nph()¸¦ È£ÃâÇÑ´Ù.
CGI->nph(1)
- header()¿Í redirect() ¹®¿¡¼ -nph ¸Å°³º¯¼ö¸¦ »ç¿ë
print $q->header(-nph=>1);
¼¹ö ¹Ð±â(¸ô¹ÐÁö)
CGI.pmÀº ¼¹ö ¹Ð±â¸¦ ±¸ÇöÇÏ´Â(multipart ¹®¼¸¦ ¸¸µå´Â)µ¥ ÇÊ¿äÇÑ ¼¼°¡Áö Çü½ÄÀÇ ÇÔ¼ö¸¦ Áö¿øÇÑ´Ù. À̵é ÇÔ¼ö´Â Ed Jordan¿¡ÀÇÇØ Á¦°øµÇ¾ú´Ù. À̵éÀ» À̸§ °ø°£À¸·Î °¡Á®¿À±â À§ÇØ ":push" ÁýÇÕÀ» °¡Á®¿Í¾ß ÇÑ´Ù. ¶ÇÇÑ ½ºÅ©¸³Æ®¸¦ NPH¸ðµå·Î µÎ°í ¹öÆÛ¸µ ¹®Á¦¸¦ ÇÇÇϱâÀ§ÇØ $|¸¦ 1·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù.
´ÙÀ½Àº ¼¹ö ¹Ð±â¸¦ ¿¹½ÃÇϱâÀ§ÇÑ °£´ÜÇÑ ¿¹ÀÌ´Ù.
1 : #!/usr/local/bin/perl
2 : BEGIN{
3 : unshift(@INC, '/home/artech/public_html/cgi');
4 : }
5 : use CGI qw/:push -nph/;
6 : $| = 1;
7 : print multipart_init(-boundary=>'----------------herewego');
8 : while (1) {
9 : print multipart_start(-type=>'text/plain'),
10 : "ÇöÀç ½Ã°£Àº ",scalar(localtime),"À̾ß.\n",
11 : multipart_end;
12 : sleep(1);
13 : }
½ÇÇà°á°ú
nph-multipart.cgi
ÀÌ ½ºÅ©¸³Æ®´Â multipart_init()¸¦ È£ÃâÇÔÀ¸·Î¼ ¼¹ö ¹Ð±â¸¦ ÃʱâÈÇÑ´Ù. ±×¸®°í multipart_start()¸¦ È£ÃâÇÔÀ¸·Î¼ »õ·Î¿î multipart ¼½¼ÇÀÌ ½ÃÀÛµÇ¸ç ¹«ÇÑ·çÇÁ¿¡ µé¾î°£´Ù. ÇöÀçÀÇ ·ÎÄ® ½Ã°£À» Ãâ·ÂÇÏ°í multipart_end()·Î multipart ¼½¼ÇÀ» Á¾·áÇÑ´Ù. 1ÃÊ ÈÄ ´Ù½Ã ·çÇÁ°¡ ½ÃÀ۵ȴÙ.
- multipart_init()
- multipart_init(-boundary=>$boundary);
multipart ½Ã½ºÅÛÀ» ÃʱâÈ ÇÑ´Ù. -boundary ÀÎÀÚ´Â ¹®¼ÀÇ °¢ ºÎºÐÀ» ºÐ¸®Çϴµ¥ »ç¿ëµÇ´Â MIME °æ°è ¹®ÀÚ¿À» ÁöÁ¤ÇÑ´Ù. Á¦°øÇÏÁö ¾ÊÀ¸¸é CGI.pmÀÌ Å¸´çÇÑ °æ°è ¹®ÀÚ¿¸¦ »ý¼ºÇÑ´Ù.
- multipart_start()
- multipart_start(-type=>$type)
ÁöÁ¤µÈ MIME Çü½ÄÀ» »ç¿ëÇؼ multipart ¹®¼ÀÇ ½ÃÀÛÇÑ´Ù. ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é text/html·Î °¡Á¤µÈ´Ù.
- multipart_end()
- multipart_end()
multipart¸¦ Á¾·áÇÑ´Ù. °¢°¢ÀÇ
multipart_start()
¿¡´ëÇØ ÇѹøÀÇ multipart_end()
¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.
¼¹ö ¹Ð±â ÀÀ¿ëÇÁ·Î±×·¥¿¡ °ü½ÉÀÌ ÀÖ´Â »ç¿ëÀÚ´Â ¶ÇÇÑ CGI::Push ¸ðµâÀ» Á¶»çÇØ º¸±â ¹Ù¶õ´Ù.