³¯Â¥: 1996-07-06 | ±Û¾´ÀÌ: µµ¾Æ | 17437 ¹ø | ÇÁ¸°Æ® | ¸ÞÀϷκ¸³»±â

Á¦ 6°­ - °í±Þ±â´É


³Ý½ºÄÉÀÙ ÄíÅ°

³Ý½ºÄÉÀÙ 1.1ÀÌ»óÀÇ ¹öÀüÀº ¼ÒÀ§ ÄíÅ°¶ó´Â °ÍÀ» Áö¿øÇÑ´Ù. ÀÌ Äí±â´Â ºê·Î¿ìÀú ¼¼¼ÇÁ¤º¸¸¦ À¯ÁöÇϱâÀ§ÇØ °í¾ÈµÈ °ÍÀÌ´Ù. CGI.pmÀº ÄíÅ°¸¦ Áö¿øÇÏ´Â ¿©·¯°¡Áö ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ´Ù.

Äí±â´Â CGI ÁúÀÇ ¹®ÀÚ¿­³»ÀÇ ¸Å°³º¯¼öó·³ name=value ½ÖÀ¸·Î ±¸¼ºµÈ´Ù. CGI ½ºÅ©¸³Æ®´Â Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ ÄíÅ°¸¦ »ý¼ºÇÏ°í À̵éÀ» HTTP Çì´õ¸¦ ÅëÇØ ºê·Î¿ìÀú·Î Àü¼ÛÇÑ´Ù. ºê·Î¿ìÀú´Â ƯÁ¤ À¥ ¼­¹ö¿¡ ¼ÓÇÑ ÄíÅ° ¸ñ·ÏÀ» À¯ÁöÇÏ°í ÀÖ´Ù°¡ À̾îÁö´Â ¼¼¼Çµ¿¾È CGI ½ºÅ©¸³Æ®¿¡ À̵é ÄíÅ°¸¦ ¸®ÅÏÇÑ´Ù.

¹Ýµå½Ã ÇÊ¿äÇÑ name=value ½Ö ÀÌ¿Ü¿¡ °¢°¢ÀÇ ÄíÅ°´Â Ãß°¡ÀûÀÎ ¿©·¯ °¡Áö ¼Ó¼ºÀ» °¡Áú ¼ö ÀÖ´Ù.

  1. ¸¸·á±â°£(expires) ÀÌ °ÍÀº ÄíÅ°ÀÇ ¸¸·á ½ÃÁ¡À» Áö½ÃÇÏ´Â ½Ã°£/³¯ÀÚ ¹®ÀÚ¿­(Ư¼öÇÑ GMT Çü½Ä)ÀÌ´Ù. ³Ý½ºÄÉÀÙÀ» Á¾·áÇÏ°í ´Ù½Ã ½ÃÀÛÇÒ Áö¶óµµ ÄíÅ°´Â ¸¸·áÀÏ¿¡ µµ´ÞÇÒ ¶§±îÁö À¯ÁöµÇ¸ç CGI ½ºÅ©¸³Æ®·Î ¸®ÅϵȴÙ. ¸¸·áÀÏÀÌ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é ÄíÅ°´Â ³Ý½ºÄÉÀÙÀ» Á¾·áÇÒ ¶§±îÁö¸¸ À¯È¿ÇÏ°Ô µÈ´Ù.

    Âü°í: ³Ý½ºÄÉÀÙÀÇ Äí±â´Â Netscape(Netscape 4.0¹Ì¸¸)Æú´õ³ª user/userid(Netscape 4.0ÀÌ»ó) Æú´õÀÇ cookies.txt¶ó´Â ÆÄÀÏ·Î ÀúÀåµÈ´Ù.

  2. µµ¸ÞÀÎ(domain) ÀÌ °ÍÀº ÄíÅ°°¡ À¯È¿ÇÑ ºÎºÐ ¶Ç´Â ¿ÏÀüÇÑ µµ¸ÞÀÎ ¸íÀÌ´Ù. ºê·Î¿ìÀú´Â ºÎºÐ µµ¸ÞÀÎ ¸íÀÌ ÀÏÄ¡Çϴ ȣ½ºÆ®¿¡´ëÇØ ÄíÅ°¸¦ ¸®ÅÏÇÑ´Ù. ¿¹¸¦µé¾î µµ¸ÞÀÎ À̸§À» ".soongsil.ac.kr"·Î ÁöÁ¤ÇÏ¸é ³Ý½ºÄÉÀÙÀº ".soongsil.ac.kr."³»¿¡ Á¸ÀçÇÏ´Â ÄÄÇ»ÅÍ(comp.mailx2.com, syscon.soongsil.ac.kr, cupid.soongsil.ac.kr µî)¿¡¼­ ±âµ¿µÇ´Â À¥¼­¹ö¿¡¸¸ Äí±â¸¦ ¸®ÅÏÇÑ´Ù. µµ¸ÞÀÎ ¸íÀº Àû¾îµµ µÎ°³ÀÌ»óÀÇ ¸¶Ä§Ç¥(.)¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ÀÌ °ÍÀº ".kr"°ú °°ÀÌ ÃÖ»óÀ§ µµ¸ÞÀÎÀ» »ç¿ëÇÏÁö ¸øÇÏ°ÔÇϱâ À§ÇÑ °ÍÀÌ´Ù. ¾î¶°ÇÑ µµ¸ÞÀεµ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é ºê·Î¿ìÀú´Â ÄíÅ°¸¦ ¼³Á¤ÇÑ ¼­¹ö¿¡¸¸ ÄíÅ°¸¦ ¸®ÅÏÇÑ´Ù.

  3. °æ·Î(path) Äí±â¿¡ °æ·Î ¼Ó¼ºÀ» Á¦°øÇϸé ÄíÅ°¸¦ ¸®ÅÏÇϱâÀü¿¡ ½ºÅ©¸³Æ®ÀÇ URLÀ» °Ë»çÇÑ´Ù. ¿¹¸¦µé¾î "/cgi-bin"À̶ó´Â °æ·Î¸¦ ÁöÁ¤Çϸé "/cgi-bin/tally.cgi", "/cgi-bin/order.cgi"°ú "/cgi-bin/customer_service/complain.cgi"¶ó´Â ½ºÅ©¸³Æ® °¢°¢¿¡ ´ëÇؼ­´Â ÄíÅ°°¡ ¸®ÅϵÇÁö¸¸ "/cgi-private/site_admin.cgi" ½ºÅ©¸³Æ®¿¡´Â ÄíÅ°°¡ ¸®ÅϵÇÁö ¾Ê´Â´Ù. ±âº»ÀûÀ¸·Î °æ·Î´Â "/"·Î ¼³Á¤µÇ¸ç µû¶ó¼­ ÇØ´ç µµ¸ÞÀÎÀÇ ¸ðµç CGI ½ºÅ©¸³Æ®·Î Äí±â°¡ Àü¼ÛµÈ´Ù.

  4. 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 ¹®¼­¸¦ ¾²´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÇÁ·Î±×·¥ÀûÀ¸·Î »õ·Î¿î ÇÁ·¹ÀÓÀ» Á¤ÀÇÇÏ´Â ¼¼°¡Áö ±â¹ýÀÌ ÀÖ´Ù.

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

  2. HTTP Çì´õ³»¿¡ ¹®¼­¿¡´ëÇÑ ¸ñÀû âÀ» ÁöÁ¤
    <A HREF="perl-cgipm3.htm#CREATING_A_STANDARD_HTTP_HEADER_">header()</A>
    ¸Þ¼Òµå¿¡ -target ¸Å°³º¯¼ö¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù.

    print $q->header(-target=>'ResultsWindow');

    ÀÌ °ÍÀ¸·Î ³Ý½ºÄÉÀÙÀº ÇÁ·¹ÀÓ À̸§ÀÌ "ResultsWindow"ÀÎ ÇÁ·¹ÀÓÀ¸·Î ½ºÅ©¸³Æ®ÀÇ Ãâ·ÂÀ» ÀаԵȴÙ. ¸¸¾à ÀÌ À̸§ÀÇ ÇÁ·¹ÀÓÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é ³Ý½ºÄÉÀÙÀº »õ·Î¿î âÀ» ¿­°í ÀÌ Ã¢À¸·Î ½ºÅ©¸³Æ®ÀÇ °á°ú¸¦ Àд´Ù. ¸ñÀû âÀÇ À̸§Àº ´Ù¾çÇÑ ÇüÅ·Π»ç¿ëÇÒ ¼ö ÀÖ´Ù. º¸´Ù ÀÚ¼¼ÇÑ °ÍÀº ³Ý½ºÄÉÀ٠ȨÆäÀÌÀÇ ÇÁ·¹ÀÓ¿¡´ëÇÑ ¹®¼­ ¸¦ º¸±â ¹Ù¶õ´Ù.

  3. <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 ¸ðµâÀ» Á¶»çÇØ º¸±â ¹Ù¶õ´Ù.



´ÙÀ½±Û: Á¦ 7°­ - ±âŸ (8198)1996-07-07
ÀÌÀü±Û: Á¦ 5°­ - Æû¹®¼­ »ý¼ºÇϱâ (9638)1996-07-05

¼¼»ó»ç´Â À̾߱â



RSS ±¸µ¶ (À͸í | ȸ¿ø | °­Á | Æ÷·³)
(C) 1996 ~ 2017 QAOS.com All rights reserved.