cgi-lib.plÀº ÆÞ¿ë CGI Library·Î¼ °¡Àå º¸ÆíÀûÀ¸·Î »ç¿ëµÈ´Ù. ±â´É¸é¿¡¼´Â CGI.pm¿¡ºñÇØ ¶³¾îÁöÁö¸¸ »ç¿ëÇϱ⽱¿ì¸ç, CGI ÇÁ·Î±×·¡¹Ö¿¡ ÇÊ¿äÇÑ ÇÙ½ÉÀûÀÎ ¼ºê·çƾÀ» Æ÷ÇÔÇϱ⶧¹® ¸¹ÀÌ »ç¿ëµÇ°í ÀÖ´Ù.
cgi-lib.plÀº ´ÙÀ½ »çÀÌÆ®¿¡¼ ¹®¼, ¿¹Á¦¿Í ÇÔ²² ±¸ÇÒ ¼ö ÀÖ´Ù.
http://cgi-lib.stanford.edu/cgi-lib/
ÇöÀç ÃֽŠ¹öÀüÀº 2.17À̸ç, ´ÙÀ½ ÁÖ¼Ò¿¡¼ ¶óÀ̺귯¸®¸¸ ¹Ù·Î ´Ù¿î ¹ÞÀ» ¼ö ÀÖ´Ù.
http://cgi-lib.stanford.edu/cgi-lib/2.17/cgi-lib.pl.txt
ReadParse
»ç¿ëÇü½Ä
- &ReadParse;
- FORM µ¥ÀÌÅÍ´Â %inÀ̶ó´Â ¿¬°ü¹è¿¿¡ ÀúÀåµÈ´Ù. µû¶ó¼ &ReadParse¸¦ È£ÃâÇÑ ÈÄ, $in{'name'}°ú °°Àº Çü½ÄÀ¸·Î ÂüÁ¶ÇÑ´Ù.
- &ReadParse(*FORM);
- FORM µ¥ÀÌÅÍ´Â %FORMÀ̶ó´Â ¿¬°ü¹è¿¿¡ ÀúÀåµÈ´Ù. µû¶ó¼ &ReadParse¸¦ È£ÃâÇÑ ÈÄ, $FORM{'name'}°ú °°Àº Çü½ÄÀ¸·Î ÂüÁ¶ÇÑ´Ù.
¼³¸í
cgi-lib.pl¿¡¼ °¡Àå ÇÙ½ÉÀûÀÎ ·çƾÀ¸·Î ÆûÀÔ·Â µ¥ÀÌÅ͸¦ µðÄÚµùÇÑ´Ù. ÇöÀç GET, HEAD, POSTÀÇ ¸Þ¼Òµå¸¦ Áö¿øÇϸç, Netscape¿¡¼ Áö¿øÇϱ⠽ÃÀÛÇÑ File Upload ±â´É±îÁö Áö¿øÇÑ´Ù.
Off-Line Mode Áö¿ø
Method°¡ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é ¸í·ÉÇà ÀÎÀڷκÎÅÍ º¯¼ö¸¦ ÀоîµéÀδÙ. ÀÌ ±â´ÉÀº CGI µð¹ö±ë¿¡ ¾ÆÁÖ À¯¿ëÇÑ ±â´ÉÀ¸·Î¼ Unix ¸í·ÉÇà¿¡¼
env.cgi name=value
¿Í °°ÀÌ ÀÔ·ÂÇϸé À¥ºê·Î¿ìÀú¿¡¼
http://david.bit.co.kr/cgi-bin/env.cgi?name=value
¸¦ ÀÔ·ÂÇÑ °Í°ú µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÑ´Ù.
PrintHeader
- &PrintHeader;
- CGIÀÇ Ãâ·ÂÇì´õÁß content-type: text/htmlÀ» Ãâ·ÂÇÑ´Ù.
ÁÖÀÇ:
&PrintHeaderÀ» È£ÃâÇÏ´Â °Í¸¸À¸·Î´Â ¾Æ¹« È¿°ú°¡ ¾øÀ¸¸ç ¹Ýµå½Ã print ¹®°ú ÇÔ²² »ç¿ëÇØ¾ß ÇÑ´Ù.
HtmlTop
- &HtmlTop($var);
- &HtmlTop´Â ´ÙÀ½°ú °°Àº HTMLÀÇ ½ÃÀۺκÐÀ» Ãâ·ÂÇÑ´Ù.
<html>
<head>
<title>$var</title>
</head>
<body>
<h1>$var</h1>
ÁÖÀÇ:
&HtmlTopÀ» È£ÃâÇÏ´Â °Í¸¸À¸·Î´Â ¾Æ¹« È¿°ú°¡ ¾øÀ¸¸ç ¹Ýµå½Ã print ¹®°ú ÇÔ²² »ç¿ëÇØ¾ß ÇÑ´Ù.
HtmlBot
- &HtmlBot;
- &HtmlBot;´Â ´ÙÀ½°ú °°Àº HTMLÀÇ Á¾·áºÎºÐÀ» Ãâ·ÂÇÑ´Ù.
</body>
</html>
ÁÖÀÇ:
&HtmlBotÀ» È£ÃâÇÏ´Â °Í¸¸À¸·Î´Â ¾Æ¹« È¿°ú°¡ ¾øÀ¸¸ç ¹Ýµå½Ã print ¹®°ú ÇÔ²² »ç¿ëÇØ¾ß ÇÑ´Ù.
¿¹1
1: #! /usr/local/bin/perl
2: require './cgi-lib.pl';
3:
4: &ReadParse;
5: print &PrintHeader;
6: print &HtmlTop("ReadParse ·çƾ ½ÃÇè");
7: print "<PRE>\n";
8: foreach $key (keys %in) {
9: print "$key = $in{$key}\n";
10: }
11: print "<PRE>\n";
12: print &HtmlBot;
½ÇÇà°á°ú
SplitParam
- &SplitParam($var);
- ´ÙÁß Æûµ¥ÀÌŸ(Select ű׿¡¼ MULTIPLE ¼Ó¼ºÀ» ÁØ°æ¿ì)ÀÇ °ªÀ» ºÐ¸®Çؼ ¹è¿·Î ¸®ÅÏÇÑ´Ù.
MethGet, MethPost
- &MethGet;
- ¿äû¹æ¹ý(REQUEST_METHOD)ÀÌ GET(&MethGET)À̸é ÂüÀ» ¸®ÅÏÇÑ´Ù.
- &MethPost;
- ¿äû¹æ¹ý(REQUEST_METHOD)ÀÌ POST(&MethPost)À̸é ÂüÀ» ¸®ÅÏÇÑ´Ù.
MyBaseUrl, MyFullUrl, MyURL
- &MyBaseUrl; &MyURL;
- Ãß°¡ÀûÀÎ °æ·ÎÁ¤º¸¿Í ÁúÀÇÁ¤º¸¸¦ Á¦¿ÜÇÑ ¼ø¼öÇÑ URLÀ» ¸®ÅÏÇÑ´Ù.
- &MyFullUrl;
- Ãß°¡ÀûÀÎ °æ·ÎÁ¤º¸¿Í ÁúÀÇÁ¤º¸¸¦ Æ÷ÇÔÇÑ ¿ÏÀüÇÑ URLÀ» ¸®ÅÏÇÑ´Ù.
PrintVariables
- &PrintVariables;
- %in(&ReadParse¸¦ ÀÎÀÚ ¾øÀÌ È£ÃâÇÑ °æ¿ì)ÀÇ °ª(Æûµ¥ÀÌŸ)¸¦ Ãâ·ÂÇÑ´Ù.
- &PrintVariables(%HASH);
- ÁÖ¾îÁø ¿¬°ü¹è¿ÀÇ ³»¿ëÀ» Ãâ·ÂÇÑ´Ù.
- &PrintVariables(*FORM);
- %FORMÀÇ ³»¿ëÀ» Ãâ·ÂÇÑ´Ù.
ÁÖÀÇ:
&PrintVariablesÀ» È£ÃâÇϱâÀü¿¡ ¹Ýµå½Ã &ReadParse¸¦ ¸ÕÀú È£ÃâÇϰųª ÀÎÀÚ¸¦ ÁÖ°í È£ÃâÇØ¾ß ÇÑ´Ù.
PrintEnv
- &PrintEnv;
- ÇöÀç ¼³Á¤µÈ ¸ðµç ȯ°æº¯¼ö¸¦ Ãâ·ÂÇÑ´Ù. &PrintEnv´Â ³»ºÎÀûÀ¸·Î &PrintVariables(*ENV)¸¦ ÀÌ¿ëÇؼ ±¸ÇöµÈ´Ù.
¿¹ 2
1: #! /usr/local/bin/perl
2:
3: require './cgi-lib.pl';
4: &ReadParse;
5:
6: if(&MethGet) {
7: print &PrintHeader;
8: print &HtmlTop("¿äû¹æ¹ý: GET");
9: print "<p>񃧯 URL: ", &MyBaseUrl, "\n";
10: print "<p>¿ÏÀüÇÑ URL: ", &MyFullUrl, "\n";
11: print "<p>´ÙÀ½Àº ÇöÀç ¼³Á¤µÈ ¸ðµç º¯¼öÀÔ´Ï´Ù\n";
12: print &PrintVariables;
13: print &PrintVariables(*ENV);
14: exit;
15: }
16:
17: if(&MethPost) {
18: print &PrintHeader;
19: print &HtmlTop("¿äû¹æ¹ý: POST");
20: print "<p>񃧯 URL: ", &MyBaseUrl, "\n";
21: print "<p>¿ÏÀüÇÑ URL: ", &MyFullUrl, "\n";
22: print "<p>´ÙÀ½Àº ÇöÀç ¼³Á¤µÈ ¸ðµç º¯¼öÀÔ´Ï´Ù\n";
23: print &PrintVariables;
24: print &PrintVariables(*ENV);
25: exit;
26: }
½ÇÇà°á°ú
CgiError
- &CgiError;
- CGIÀÇ Ãâ·Â Çì´õ, HTML Çì´õ¸¦ Æ÷ÇÔÇÑ ±âº»ÀûÀÎ ¿À·ù ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù.
- &CgiError($var1, $var2);
- CGIÀÇ Ãâ·Â Çì´õ, HTML Çì´õ¸¦ Ãâ·ÂÇϸç, $var1Àº TITLE ű׿¡ $var2´Â BODY ű×ÀÇ Pű׸¦ ÀÌ¿ëÇؼ Ãâ·ÂÇÑ´Ù.
CgiDie
- &CgiDie;, &CgiDie($var1, $var2);
- &CgiError°ú À¯»çÇÏ°Ô ¿À·ù ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϸç, ¿À·ù ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ Á÷ÈÄ, ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù.
¿¹ 3 - Mail Gateway
´ÙÀ½ ¿¹´Â cgi-lib.plÀ» ÀÌ¿ëÇؼ ±¸ÇöÇÑ °£´ÜÇÑ Mail GatewayÀÌ´Ù. Network È¿À²À» À§ÇØ Æû °Ë»ç´Â CGI°¡ ¾Æ´Ï¶ó °£´ÜÇÑ JavaScript¸¦ ÀÌ¿ëÇß´Ù. JavaScript¿¡´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº ´Ù¸¥ Ã¥À» Âü°íÇϱ⠹ٶõ´Ù.
HTML - mail.html
¼Ò½º
1 : <HTML>
2 : <HEAD>
3 : <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=EUC-KR">
4 : <LINK REV="Made" HREF="mailto:[email protected]">
5 : <LINK REL="StyleSheet" HREF="http://qaos.com/style.css">
6 : <TITLE>DoAÀÇ À¥ ¸ÞÀÏ °ÔÀÌÆ®¿þÀÌ ÀÔ´Ï´Ù.</TITLE>
7 : <script language="JavaScript">
8 : <!-- JavaScript¸¦ Áö¿øÇÏÁö ¾Ê´Â ºê·Î¿ìÀú¸¦ À§ÇØ ÁÖ¼®Ã³¸®
9 : function checkForm(form) {
10 : if(form.from.value == '') {
11 : alert("À̸§ÀÌ ºüÁ³½À´Ï´Ù. À̸§Àº ²À Àû¾îÁֽʽÿä");
12 : form.from.focus();
13 : return;
14 : }
15 : if(form.subject.value == '') {
16 : alert("Á¦¸ñÀÌ ºüÁ³½À´Ï´Ù. Á¦¸ñÀº ²À Àû¾îÁֽʽÿä");
17 : form.subject.focus();
18 : return;
19 : }
20 : if(form.comments.value == '') {
21 : alert("ÀÇ°ßÀÌ ºüÁ³½À´Ï´Ù. ÀÇ°ßÀº ²À Àû¾îÁֽʽÿä");
22 : form.comments.focus();
23 : return;
24 : }
25 : form.submit();
26 : }
27 : // --½ºÅ©¸³Æ®ÀÇ ³¡-->
28 : </script>
29 : </HEAD>
30 : <body class=guestbook>
31 : <H2 class=h3> Mail Gateway </H2>
32 : <H2 class=ban> ÆÒ ·¹ ÅÍ </H2>
33 : <hr noshade size=4>
34 : <FORM METHOD="POST" ACTION="cgi-bin/mg.cgi">
35 : <CENTER>
36 : <TABLE border="0" cellpadding="1" cellspacing="0"
width=400 class=border>
37 : <tr><td class=bgblue>
38 : <table border="0" cellpadding="0" cellspacing="3">
39 : <tr>
40 : <th rowspan=2>¼Û ½Å ÀÚ</th><td>ÀÌ¡¡¡¡¸§</td>
41 : <td><INPUT TYPE="text" NAME="from" maxlength=20 SIZE=40></td>
42 : </tr>
43 : <tr>
44 : <td>ÀüÀÚ¿ìÆí</td>
45 : <td><INPUT TYPE="text" NAME="fromaddr" SIZE=40></td>
46 : </tr>
47 : <tr>
48 : <th>Á¦¡¡¡¡¸ñ</th>
49 : <td colspan=2><INPUT TYPE="text" NAME="subject" SIZE=50></td>
50 : </tr>
51 : <tr>
52 : <th valign=top rowspan=2>ÀÇ¡¡¡¡°ß</th>
53 : <td colspan=2>
<textarea name="comments" cols="50" ROWs="5" wrap="hard"></textarea>
</td>
54 : </tr>
55 : <tr>
56 : <td colspan=2 align=center>
<INPUT TYPE="button" value="º¸³»±â" onClick="checkForm(this.form)">
<INPUT TYPE="reset" value="Áö¿ì±â">
</td>
57 : </tr>
58 : </table>
59 : </td></tr>
60 : </TABLE>
61 : </CENTER>
62 : </FORM>
63 : <p class=bar2>µµ¿ò¸»</p>
64 : <p>
65 : <ul>
66 : <li>»ç¿ëÇÒ ¼ö ÀÖ´Â ¸ÞÀÏ ¼¹ö°¡ ¾ø´Â °æ¿ì, »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
67 : <li>¼Û½ÅÀÚÀÇ À̸§Àº °¡±ÞÀû ¿µ¹®À¸·Î Àû¾î Áֱ⠹ٶø´Ï´Ù.
68 : <li>Á¦¸ñ°ú ÀÇ°ßÀº ¹Ýµå½Ã Àû¾îÁֱ⠹ٶø´Ï´Ù.
69 : </ul>
70 : </body>
71 : </html>
½ÇÇà°á°ú
mg.cgi
¼³¸í
- 7~27
- ÆûÀ» °Ë»çÇÏ´Â ÀÚ¹Ù½ºÅ©¸³Æ®ÀÌ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼ ÆûÀ» °Ë»çÇϹǷΠCGI ÇÁ·Î±×·¥¿¡¼ ÆûÀ» °Ë»çÇÏ´Â ·çƾÀÌ »ý·«µÇ¾ú´Ù.
- 36~38
- Å×À̺íÀÇ °æ°è(Border) »ö¼ºÀ» ÁöÁ¤ÇϱâÀ§ÇØ TABLE ű׸¦ Áߺ¹Çؼ »ç¿ëÇß´Ù. Æû °ü·Ãű״ ¾ÕÀýÀ» ÂüÁ¶ÇÑ´Ù.
- 56
- ÆûÀÇ Á¦ÃâÀ» ÀÚ¹Ù½ºÅ©¸³Æ®·Î ÇϱâÀ§ÇØ Å±×ÀÇ TYPE ¼Ó¼ºÀ» buttonÀ¸·Î Çß´Ù.
CGI - mg.cgi
¼Ò½º
1 : #! /usr/local/bin/perl
2 : require './cgi-lib.pl';
3 : $mailprog='/usr/lib/sendmail -t';
4 : $toaddr = '[email protected]';
5 : $to = '±èÀç±Ù';
6 : $home = 'http://syscon.soongsil.ac.kr/~artech';
7 : &ReadParse(*FORM);
8 : &CgiDie("¿À·ù", "À̸§, ÀÇ°ß, Á¦¸ñÁß Çϳª°¡ ºüÁ³½À´Ï´Ù.")
unless($FORM{from} && $FORM{subject} && $FORM{comments});
9 : open(MAIL, "|$mailprog $toaddr");
10 : print MAIL <<Mail;
11 : From: "$FORM{'from'}"<$FORM{fromaddr}>
12 : To: "$to"<$toaddr>
13 : Subject: $FORM{'subject'}
14 : $FORM{comments}
15 : Mail
16 : close(MAIL);
17 : print &PrintHeader;
18 : print &HtmlTop("ÆíÁöÀü¼Û¿Ï·á");
19 : print <<Html;
20 : <p>
21 : ÆíÁö¸¦ ¼º°øÀûÀ¸·Î Àü¼ÛÇß½À´Ï´Ù.
22 : <p>
23 : ȨÆäÀÌÁö·Î Àü¼ÛÇϱâÀ§Çؼ´Â <a href="$home">¿©±â</a>¸¦ Ŭ¸¯ÇØ ÁÖ¼¼¿ä.
24 : Html
25 : print &HtmlBot;
¼³¸í
- 2 : require './cgi-lib.pl';
- cgi-lib.plÀ» ºí·¯¿Â´Ù. CGI ÇÁ·Î±×·¥°ú ¶óÀ̺귯¸® ÆÄÀÏÀÌ °°Àº µð·ºÅ丮¿¡ ÀÖ´Â °æ¿ì ¹Ýµå½Ã "./"¸¦ ÀÌ¿ëÇؼ ÇöÀç µð·ºÅ丮ÀÓÀ» ¸í½ÃÀûÀ¸·Î Ç¥½ÃÇØ¾ß ÇÑ´Ù. 'cgi-lib.pl'À» »ç¿ëÇÏ´Â °æ¿ì ÇöÀç µð·ºÅ丮°¡ ¾Æ´Ï¶ó ÆÞÀÇ Ç¥ÁØ ¶óÀ̺귯¸® °æ·Î(@INC¿¡ ÀúÀåµÈ)¿¡¼ cgi-lib.plÀ» ã´Â ´Ù´Â °Í¿¡ ÁÖÀÇÇϱ⠹ٶõ´Ù.
- 3 : $mailprog='/usr/lib/sendmail -t';
- ¸ÞÀÏÀ» Àü¼ÛÇÒ ÇÁ·Î±×·¥À» ÁöÁ¤ÇÑ´Ù. ¿©±â¼ -t´Â ¸í·ÉÇàÀ¸·Î Á¦°øµÈ ÀüÀÚ¿ìÆí ÁÖ¼Ò°¡ ¾Æ´Ï¶ó To: Çì´õ·Î ÁöÁ¤ÇÑ ÀüÀÚ¿ìÆí ÁÖ¼Ò¸¦ »ç¿ëÇؼ ÆíÁö¸¦ Àü¼ÛÇ϶ó´Â ÀǹÌÀÌ´Ù.
- 9 : open(MAIL, "|$mailprog $toaddr");
- ÇÊÅÍ ¸ðµå·Î ÈÀÏÀ» ¿ÀÇÂÇÑ´Ù. ÀÌ·¸°Ô ¿ÀÇÂÇÑ ÆÄÀÏÇڵ鿡 µ¥ÀÌŸ¸¦ Ãâ·ÂÇϸé ÀÌµé µ¥ÀÌŸ¸¦ ÀÌ¿ëÇؼ ÆíÁö¸¦ Àü¼ÛÇÏ°Ô µÈ´Ù.
- 10~15
- MAILÀ̶ó´Â ÆÄÀÏÇڵ鿡 µ¥ÀÌŸ¸¦ Ãâ·ÂÇÑ´Ù. From:, To:, Subject: Çì´õ¸¦ ÀÌ¿ëÇؼ ¼Û½ÅÀÚ, ¼ö½ÅÀÚ, Á¦¸ñÀ» ÁöÁ¤Çϸç, $FORM{comments}¸¦ ÀÌ¿ëÇؼ »ç¿ëÀÚÀÇ ÀÇ°ßÀ» Body¿¡ »ðÀÔÇÑ´Ù.
- 16 : close(MAIL);
- ½ÇÁ¦ ÆíÁöÀÇ Àü¼ÛÀº MAILÀ̶ó´Â ÆÄÀÏÇÚµéÀ» ´Ý´Â ½ÃÁ¡¿¡¼ ÀÌ·ç¾î Áø´Ù.
- 17~25
- ÆíÁö¸¦ Àü¼ÛÇÑ ÈÄ Àü¼Û°á°ú¸¦ Ãâ·ÂÇÏ´Â ºÎºÐÀÌ´Ù.