ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
Docbook ¿ø¹®
CGI ÇÁ·Î±×·¡¹Ö ¼Ò°³

CGI ÇÁ·Î±×·¡¹Ö ¼Ò°³

À±»ó¹è

                yundream@join.co.kr
            

고친 과정
고침 0.92004³â 5¿ù 17ÀÏ 20½Ã
docbook ¹®¼­·Î ¿Å±è

Áö±Ý¿¡ ¿Í¼­¾ß CGI(12)´Â Åð¹°·Î ºÐ·ùµÈ´Ù. PHP(12), ASP¿Í °°Àº ÈǸ¢ÇÑ ¼­¹ö»çÀÌÆ® ½ºÅ©¸³Æ®¾ð¾îÀÇ µîÀåÀ¸·Î µ¿ÀûÀÎ ÆäÀÌÁö¸¦ ½±°Ô ÀÛ¼ºÇϴµ¥, ±»ÀÌ ´Ù·ç±â Èûµé°í ±î´Ù·Î¿î ¾ð¾î¸¦ ÀÌ¿ëÇØ¼­ CGIÇÁ·Î±×·¡¹ÖÀ» ½ÃµµÇؾßÇÏ´Â Çʿ䰡 »ç¶óÁ³±â ¶§¹®ÀÌ´Ù.

±×·¯³ª ¿©ÀüÈ÷ º¸¾È, ±âÁ¸ Á¦Ç°°úÀÇ È£È¯, ±âŸ Çʿ信 ÀÇÇØ¼­ CGI¿¡ ´ëÇÑ ¼ö¿ä°¡ ¹ß»ýÇÑ´Ù. À̹ø ±ÛÀº CGIÀÇ °³³ä°ú CGI ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀÛ¼º¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ±×¸®°í ±ÛÀÇ ¸¶Áö¸·¿¡´Â ¾ÆÆÄÄ¡ À¥¼­¹ö¿¡¼­ ¿ì¸®°¡ ÀÛ¼ºÇÑ CGI ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛµ¿½Ã۵µ·Ï ÇϰڴÙ.


1. CGI ¼Ò°³

CGI´Â Common Gateway InterfaceÀÇ ÁÙÀÓ¸»Àε¥, information ¼­¹ö(¿Í ¿ÜºÎ ¾ÖÇø®ÄÉÀ̼ǰúÀÇ ÀÎÅÍÆäÀ̽º¸¦ À§ÇÑ Ç¥ÁØ ¹æ¹ýÀÌ´Ù. information ¼­¹öÀÇ °¡Àå ´ëÇ¥ÀûÀÎ ¿¹´Â À¥¼­¹öÀÌ´Ù. ÀϹÝÀûÀÎ plain HTML(12) ¹®¼­°¡ À¥¼­¹ö¸¦ ÅëÇØ¼­ ¼­ºñ½ºµÈ´Ù¸é ÀÌ ³»¿ëÀº "Á¤Àû"µ¥ÀÌÅͰ¡ µÈ´Ù. À¥ ÇÁ·Î±×·¡¸Ó°¡ ¹®¼­¸¦ Á÷Á¢ ¼öÁ¤ÇϱâÀü¿¡´Â ¾î¶² À¥¼­ÆÛ°¡ ¾î¶² ½Ã°£¿¡ ¹®¼­¸¦ º¸´õ¶óµµ µ¿ÀÏÇÑ ¹®¼­¸¦ ¹Þ¾Æº¸°Ô µÈ´Ù.

¸î³âÀü¸¸ ÇØµµ ÀÌ·¯ÇÑ plain HTML¹®¼­¸¸À¸·Îµµ ÈǸ¢ÇÑ À¥ ¼­ºñ½º¸¦ Á¦°øÇÒ ¼ö ÀÖ¾úÀ¸³ª, ¿äÁòÀÇ À¥¼­ºñ½º´Â ´ëºÎºÐ »óÈ£ ÀÛ¿ëÀûÀÎ °ÍÀÌ´Ù. À̸¦Å×¸é °í°´ÀÇ Á¤º¸¸¦ È®ÀÎÇØ¼­ °í°´¸¶´Ù °¢°¢ ´Ù¸¥ Á¤º¸¸¦ Áö´Ñ ÆäÀÌÁö¸¦ »Ñ·ÁÁÖ´Â µîÀÇ ¼­ºñ½º°¡ ÇÊ¿äÇØÁø °ÍÀÌ´Ù. CGI´Â ÀÌ·¯ÇÑ µ¿ÀûÆäÀÌÁö ¼­ºñ½º¸¦ À§Çؼ­ ¸¸µé¾îÁ³´Ù.

CGIÇÁ·Î±×·¥Àº À¥¼­¹ö¿¡ ÀÇÇØ¼­ ¸ðµâ ȤÀº ÇÁ·Î±×·¥ ÇüÅ·Π½ÇÇàµÇ¸ç, µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇØ¼­ µ¥ÀÌÅ͸¦ Àоî¿Í¼­ À¥ÆäÀÌÁö·Î Ãâ·ÂÇϰųª, µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â µîÀÇ ÀÏÀ» ÇÑ´Ù. Áß°£¿¡¼­ µ¥ÀÌÅ͸¦ Áß°èÇÏ´Â ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ÀÇ Æ¯Â¡ ¶§¹®¿¡ Gateway¶ó´Â À̸§ÀÌ ºÙ¾ú´Ù. ÇöÀç CGIÀÇ ¹öÁ¯Àº 1.1±îÁö ³ª¿Í ÀÖ´Ù.

참고: CGIÀº ÀÎÅÍÆäÀ̽º´Ù. ¶óÀ̺귯¸®³ª ÇÔ¼ö°¡ ¾Æ´Ï´Ù.

CGI´Â ±âº»ÀûÀ¸·Î ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡¼­ ½ÇÇàµÇ¾îÁö´Â ÇÁ·Î±×·¥À¸·Î ´Ù¸¥ ÇÁ·Î±×·¥(vi, ls ..)µé°ú ÀüÇô ´Ù¸¦¹Ù°¡ ¾ø´Ù. ´Ù¸¥ ÇÁ·Î±×·¥µéÀÌ Ãâ·Â°á°ú¸¦ Ç¥ÁØÃâ·ÂÀ» ÅëÇØ¼­ Àü´ÞÇÏ´Â °Í°ú´Â ´Þ¸® CGI´Â Ãâ·Â°á°ú¸¦ À¥¼­¹ö·Î Àü´ÞÇÑ´Ù´Â Á¤µµ¸¸ ¾à°£ ´Ù¸£´Ù°í º¸¸é µÈ´Ù.

¸¸¾à ´ç½ÅÀÌ Apache(12) HTTPD ¼­¹ö¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é, ÀÛ¼ºµÈ CGI ÇÁ·Î±×·¥µéÀº /cgi-bin ¿¡ À§Ä¡ÇÒ °ÍÀÌ´Ù. CGIÇÁ·Î±×·¡¹ÖÀº ´ÙÀ½°ú °°Àº ´Ù¾çÇÑ ¾ð¾î¸¦ ÅëÇØ¼­ ÀÛ¼º°¡´É ÇÏ´Ù.

  • C/C++

  • PHP(12)

  • Perl

  • TCL

  • Python

  • Ruby

  • ¸ðµç Á¾·ùÀÇ À¯´Ð½º Shell Script

  • Visual Basic

  • AppleScript

°á·ÐÀûÀ¸·Î ¸»ÇÏÀÚ¸é ¾î¶°ÇÑ ¾ð¾î¸¦ ¾²´õ¶óµµ CGI±Ô°Ý¸¸ ÁöŲ´Ù¸é CGIÇÁ·Î±×·¥ÀÛ¼ºÀ» À§Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à C¿Í C++°°Àº ¾ð¾î¸¦ ÀÌ¿ëÇØ¼­ °³¹ßÇÑ´Ù¸é ÄÄÆÄÀÏÀ» ½ÃÄѼ­ Á¦´ë·Î ½ÇÇàµÇ´ÂÁö ¸ÕÀú Å×½ºÆ®ÇغÁ¾ß ÇÒ °ÍÀÌ´Ù. PerlÀ̳ª shell°ú °°Àº ½ºÅ©¸³Æ® ¾ð¾î¸¦ ÀÌ¿ëÇÑ´Ù¸é ÄÄÆÄÀϽÃŰÁö ¾Ê¾Æµµ µÇ¹Ç·Î Á»´õ ÆíÇÏ°Ô ÇÁ·Î±×·¡¹Ö °¡´ÉÇÒ °ÍÀÌ´Ù. ÀÌ·± ÀÌÀ¯·Î ½ºÅ©¸³Æ® ¾ð¾î°¡ °ú°Å¿¡ CGI¸¦ À§Çؼ­ ³Î¸® »ç¿ëµÇ¾ú´Ù. PerlÀÇ °æ¿ì¿¡´Â ¹ü¿ë ¾ð¾î·Î °³¹ßµÇ¾úÁö¸¸ ƯÀ¯ÀÇ °­·ÂÇÑ ¹®ÀÚ¿­ ó¸® ´É·ÂÀ¸·Î ÀÎÇÏ¿© ƯÈ÷ CGIÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ¾ð¾î·Î ³Î¸® »ç¿ëµÇ¾ú´Ù.

ÄÄÆÄÀÏ µÈ ½ÇÇàÆÄÀÏÀ̳ª, ½ºÅ©¸³Æ®µéÀº /cgi-bin¿¡ ¿Å°Ü ³õ°í À¥ÆäÀÌÁö¸¦ ÅëÇØ¼­ ºÒ·¯µéÀ̸é À¥¼­¹ö°¡ ¾Ë¾Æ¼­ ½ÇÇà½ÃŰ°Ô µÈ´Ù.


1.1. PHP(12), ASP¿Í CGI(12)

Âü°í·Î PHP(12)¿Í ASP°°Àº °æ¿ì ÀÚüÀûÀ¸·Î CGI¸¦ ¸¸Á·ÇÑ´Ù. CGI±Ô°ÝÀ» ¿£Áø³»ºÎ¿¡¼­ ¾Ë¾Æ¼­ ó¸®ÇØ ÁֹǷΠ°³¹ßÀÚ´Â CGI¿¡ ´ëÇØ¼­ °ñÄ¡¾ÆÇÁ°Ô ¸Ó¸® ¾µÇÊ¿ä ¾øÀÌ ±¸Çö ÀÚü¿¡ ÁýÁßÇÒ ¼ö ÀÖ´Ù.

±×·¯³ª PHP(12)¿Í ASPÀÇ °æ¿ì À¥¼­¹öÀÇ ¸ðµâ·Î¼­ ÀÛµ¿Çϴµ¥ ÀÌ´Â °íÀüÀûÀÎ CGIÇÁ·Î±×·¥µé°ú´Â Ʋ¸° ÀÛµ¿¹æ½ÄÀÌ´Ù. ±×·¯¹Ç·Î ÀÌÇÏ CGI¸¦ ¼³¸íÇϴµ¥ À־´Â PHP(12)¿Í ASP´Â ¿¹¿Ü·Î ÇÏ°í ¼³¸íÇϵµ·Ï ÇϰڴÙ.


2. CGI ÇÁ·Î±×·¡¹Ö

2.1. ÀÛµ¿¹æ½Ä(ÀÔ/Ãâ·Â)

À¥¼­¹ö¿¡¼­ CGI ÇÁ·Î±×·¥Àº fork()¸¦ ÅëÇØ¼­ ½ÇÇà½Ã۸ç CGI¿¡ µ¥ÀÌÅ͸¦ Àü´ÞÇϱâ À§Çؼ­ Ç¥ÁØÃâ·Â°ú ȯ°æº¯¼ö¸¦ »ç¿ëÇϸç, CGIÇÁ·Î±×·¥À¸·Î ºÎÅÍ µ¥ÀÌÅ͸¦ Àü´Þ¹Þ±â À§Çؼ­ Ç¥ÁØÀÔ·ÂÀ» »ç¿ëÇÑ´Ù.

À¥¼­¹ö¿¡¼­ CGIÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§´Â ¿©·¯°¡Áö Á¤º¸µµ CGIÇÁ·Î±×·¥¿¡ Àü´ÞÇÒ °ÍÀÌ´Ù. Àü´Þ¹æ½ÄÀº GET, POST¹æ½ÄÀÌ ´ëÇ¥ÀûÀÌ´Ù. GET¹æ½ÄÀÇ µ¥ÀÌÅÍ ¿äû¿¡¼­ ÀÌ·ç¾îÁø URI°ªÀº È­°æº¯¼ö¸¦ ÅëÇØ¼­, POST¹æ½ÄÀº Ç¥ÁØÀÔ·ÂÀ» ÅëÇØ¼­ CGIÇÁ·Î±×·¥À¸·Î ³Ñ¾î°£´Ù.

<img src=http://www.joinc.co.kr/albums/album01/aik.gif>
			


2.1.1. GET ¹æ½Ä

GET¹æ½ÄÀº URI¸¦ ÅëÇØ¼­ ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ ¿äûÇÏ´Â ¹æ½ÄÀÌ´Ù.

http://www.joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=29106
				
À¥¼­¹ö´Â GET¹æ½ÄÀ» ÅëÇØ¼­ ÀԷ¹ÞÀº µ¥ÀÌÅ͸¦ ȯ°æº¯¼ö¸¦ ÅëÇØ¼­ CGIÇÁ·Î±×·¥¿¡ Àü´ÞÇÑ´Ù. CGIÇÁ·Î±×·¥Àº ȯ°æº¯¼ö¸¦ Àоîµé¿©¼­ ÇÊ¿äÇÑ ÀÛ¾÷À» ÇÏ°Ô µÈ´Ù. C¿¡¼­´Â getenv()¸¦ ÅëÇØ¼­ ȯ°æº¯¼ö¸¦ Àоîµé ÀÏ ¼ö ÀÖ´Ù. ´ÙÀ½Àº À§ÀÇ URI·Î Àü´ÞµÈ °ªÀ» °¢ ¾ð¾îº° ȯ°æº¯¼ö¸¦ ÀоîµéÀÌ´Â ¹æ¹ýÀÌ´Ù.
perl
===========
print $ENV{'QUERY_STRING'};    # modload

C/C++
============
char *value;
value = getenv("QUERY_STRING");    // modload

Shell
============
echo $QUERY_STRING        # modload
				
ÀÌ·¸°Ô Çϸé Äõ¸® ¹®ÀÚ¿­ÀÎ "op=modload&name=Forum&file=viewtopic&topic=29106"°¡ ³Ñ¾î¿À°í À̰ÍÀ» Àû´çÈ÷ ÆÄ½ÌÇØ¼­ »ç¿ëÇÏ¸é µÈ´Ù.

ȯ°æº¯¼ö´Â ÇÁ·Î¼¼½ºÀÇ ½ºÅÿµ¿ª¿¡ À§Ä¡ÇÑ´Ù. ±×·¯¹Ç·Î Àü´ÞÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ¾ç¿¡ Á¦ÇÑÀÌ »ý±ä´Ù(Á¦ÇÑÀ» ¾Æ½Ã´Â ºÐÀÇ ´äº¯ ºÎʵ右´Ï´Ù).


2.1.2. POST ¹æ½Ä

POST ¹æ½ÄÀº À¥¿¡¼­ <form>À» ÅëÇØ¼­ Àü´ÞµÇ´Â °ªµé·Î CGIÇÁ·Î±×·¥À¸·Î´Â Ç¥ÁØÀÔ·ÂÀ» ÅëÇØ¼­ Àü´ÞµÈ´Ù. °æº¯¼ö¿¡ ÀÇÇØ¼­ Á¦ÇÑÀÌ »ý±â´Â GET¹æ½Ä¿¡ ºñÇØ¼­ Àü´ÞÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ¾ç¿¡ Á¦¾à¾øÀÌ »ç¿ë°¡´ÉÇÏ´Ù. GET°ú ¸¶Âù°¡Áö·Î POST¹æ½Ä¿ª½Ã °æ¿ì ÇÁ·Î±×·¥¿¡¼­ ¹®ÀÚ¿­ ÆÄ½ÌÀ» ÇØÁà¾ß ÇÑ´Ù. ÀÌ°Ç »ó´çÈ÷ ±ÍÂúÀº ÀÛ¾÷ÀÌ µÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ±ÍÂúÀº ÀÛ¾÷À» ´ë½Å ó¸®ÇØÁÙ ¶óÀ̺귯¸®°¡ ¿©·µ Á¸ÀçÇϴµ¥, ¹®¼­ÀÇ ¸¶Áö¸·¿¡ µû·Î ¾ð±ÞÇϵµ·Ï ÇϰڴÙ.


2.2. CGI ȯ°æ º¯¼ö

CGI ÇÁ·Î±×·¥ÀÇ °æ¿ì ´Üµ¶ÇÁ·Î¼¼½º·Î ÀÛµ¿Çϱ⠶§¹®¿¡, ÀÚ½ÅÀ» ½ÇÇà½ÃŲ À¥¼­¹öÀÇ ¿©·¯°¡Áö Á¤º¸¸¦ ¾î¶±Çؼ­µçÁö À¯ÁöÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. À̸¦Å׸é À¥¼­¹öÀÇ Á¾·ù°¡ ¹«¾ùÀÎÁö, ¾î¶² URL(12)ÀÌ À¥¿¡ Á¢±ÙÀ» ÇØ¼­ CGI ÇÁ·Î±×·¥À» °¡µ¿½ÃÄ×´ÂÁö, ¾î¶² Äõ¸® ¹®ÀÚ¿­À» º¸³Â´ÂÁö, GETÀ» ÀÌ¿ëÇß´ÂÁö POST¸¦ ÀÌ¿ëÇß´ÂÁö µîµîÀÇ Á¤º¸¸¦ À¥¼­¹ö·Î ºÎÅÍ »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù.

ÀÌ·¯ÇÑ ¸ðµç Á¤º¸´Â ¾à¼ÓµÈ CGI ȯ°æº¯¼ö¸¦ ÅëÇØ¼­ ÀÐ¾î ¿Ã ¼ö ÀÖ´Ù. ÇöÀç CGI ȯ°æº¯¼ö¿¡´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ Á¤ÀǵǾî ÀÖ´Ù.

		
   DOCUMENT_ROOT           // ¹®¼­°¡ À§Ä¡ÇÏ´Â ·çÆ® µð·ºÅ丮
   GATEWAY_INTERFACE       // »ç¿ëµÈ gateway ÀÎÅÍÆäÀ̽º (À̰æ¿ì CGI 1.1) 
   HTTP_ACCEPT 
   HTTP_REFERER            // POST¹æ½ÄÀÏ °æ¿ì ¿äûÇÑ ÆäÀÌÁö À̸§
   HTTP_ACCEPT_CHARSET 
   HTTP_ACCEPT_LANGUAGE 
   HTTP_CONNECTION         // ¿¬°á¹æ½Ä (º¸Åë Keep-Alive) 
   HTTP_HOST               // À¥¼­¹öÀÇ IP¿Í PORTÁ¤º¸ 
   HTTP_USER_AGENT         // ¿¬°á¿¡ »ç¿ëÇÑ ºê¶ó¿ìÀú Á¤º¸
   PATH                    // ½ÇÇàÆÄÀÏ °æ·Î 
   QUERY_STRING            // Äõ¸® ¹®ÀÚ¿­ 
   REMOTE_ADDR             // Ŭ¶óÀÌ¾ðÆ® ÁÖ¼Ò
   REMOTE_HOST	            
   REMOTE_PORT             // Ŭ¶óÀÌ¾ðÆ® Æ÷Æ®
   REQUEST_METHOD          // ¿äû¹æ¹ý, º¸Åë GETÀ̳ª POST
   REQUEST_URI             // URIÁ¤º¸
   SCRIPT_FILENAME 
   SCRIPT_NAME             // ½ÇÇàÇÑ CGI ÇÁ·Î±×·¥ À̸§ 
   SERVER_ADMIN            // ¼­¹ö°ü¸®ÀÚ Á¤º¸, º¸Åë emailÁÖ¼Ò
   SERVER_NAME             // ¼­¹öÀ̸§, º¸Åë µµ¸ÞÀÎÀ̸§
   SERVER_PORT             // ¼­ºñ½º Æ÷Æ®(80, 8080)
   SERVER_PROTOCOL         // ¼­ºñ½º ÇÁ·ÎÅäÄÝ(HTTP1.0, HTTP1.1)
   SERVER_SOFTWARE         // ¼­¹ö ÇÁ·Î±×·¥
   TZ                      // ŸÀÓÁ¸
			


2.3. CGI Å×½ºÆ® ÇÁ·Î±×·¥ - GET ¹æ½Ä

±×·³ °£´ÜÇÑ CGIÅ×½ºÆ® ÇÁ·Î±×·¥À» Çϳª ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ. ÀÌ ÇÁ·Î±×·¥Àº ÇöÀç ½Ã°£°ú ÇÔ²² Äõ¸® ½ºÆ®¸µ°ú ±âŸ CGIȯ°æº¯¼ö¸¦ Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÑ´Ù.

	
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>

static char dday[256];
static char wday[7][2] = {"ÀÏ","¿ù", "È­", "¼ö", "¸ñ", "±Ý", "Åä"};

char * time2str(time_t, char * );

char * time2str(time_t org_time, char *format)
{
    struct tm *tm_ptr;
    int index=0;
    int i;
    tm_ptr = localtime(&org_time);
    memset(dday, 0x00, 256);
    for (i = 0; i < strlen(format); i++)
    {
        switch(format[i])
        {
            case 'y': // ³â                                        
                sprintf(dday+index, "%04d", tm_ptr->tm_year+1900);
                index += 4;
                break;
            case 'm': // ¿ù(1-12), ºÐ(0-59)
                if (format[i+1] == 'i')
                {
                    sprintf(dday+index, "%02d", tm_ptr->tm_min);
                    index += 2;
                    i++;
                    break;
                }
                else
                {
                    sprintf(dday+index, "%02d", tm_ptr->tm_mon+1);
                    index += 2;
                    break;
                }
            case 'd': // ÀÏ (1-31)                                
                sprintf(dday+index, "%02d", tm_ptr->tm_mday);
                index += 2;
                break;
            case 'D': // ¿äÀÏ(ÀÏ ~ Åä)                            
                sprintf(dday+index, "%s", wday[tm_ptr->tm_wday]);
                index += 2;
                break;
            case 'h': // ½Ã(00-23)                                
                sprintf(dday+index, "%02d", tm_ptr->tm_hour);
                index += 2;
                break;
            case 's': // ÃÊ(00-59)                                
                sprintf(dday+index, "%02d", tm_ptr->tm_sec);
                index += 2;
                break;

            default:
                dday[index] = format[i];
                index++;
        }
    }
    return dday;
}

void print_header()
{
    printf("Content-type: text/html\n\n");
}

int main(int argc, char ** argv)
{
    print_header(); // ¹Ýµå½Ã Æ÷ÇԵǾî¾ß ÇÑ´Ù.
    printf("<h2>Hello World CGI VERSION : %s</h2>\n",
            time2str( time((time_t *)NULL), "y³â m¿ù dÀÏ D¿äÀÏ h:mi:s"));
    printf("Query String %s<br>\n", getenv("QUERY_STRING"));

    printf("SERVER_SOFTWARE = %s<br>\n", getenv("SERVER_SOFTWARE"));
    printf("GATEWAY_INTERFACE = %s<br>\n", getenv("GATEWAY_INTERFACE"));
    printf("SERVER_PROTOCOL = %s<br>\n", getenv("SERVER_PROTOCOL"));
    printf("HTTP_ACCEPT = %s<br>\n", getenv("HTTP_ACCEPT"));
    printf("REQUEST_METHOD = %s<br>\n", getenv("REQUEST_METHOD"));
    printf("REMOTE_ADDR = %s\n", getenv("REMOTE_ADDR"));
    printf("<br><br>\n");
}
			
À§ Äڵ带 ÄÄÆÄÀÏ ÇÑµÚ À¥¼­¹öÀÇ cgi-bin¿¡ test ¶ó´Â À̸§À¸·Î º¹»çÇÑ´ÙÀ½ http://hostname/cgi-bin/test?name=yundreamÀ¸·Î Å×½ºÆ® ÇØº¸µµ·Ï ÇÏÀÚ.
Hello World CGI VERSION : 2004³â 05¿ù 11ÀÏ È­¿äÀÏ 11:10:27

Query String name=yundream
SERVER_SOFTWARE = Apache/1.3.26 (Unix) PHP(12)/4.3.0
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.0
HTTP_ACCEPT = text/*, image/*, audio/*, application/*
REQUEST_METHOD = GET
REMOTE_ADDR = 192.168.1.101
			


2.4. CGI Å×½ºÆ® ÇÁ·Î±×·¥ - POST ¹æ½Ä

POST ¹æ½ÄÀ̶õ URI¸¦ ÅëÇØ¼­ µ¥ÀÌÅ͸¦ ³Ñ±â´Â ¹æ½ÄÀÌ ¾Æ´Ñ <form>À» ÅëÇØ¼­ µ¥ÀÌÅ͸¦ ³Ñ±â´Â ¹æ½ÄÀ» ¶æÇÑ´Ù. CGI ÇÁ·Î±×·¥¿¡¼­´Â Ç¥ÁØÀÔ·ÂÀ¸·Î ¹ÞÀ» ¼ö ÀÖ´Ù. ´ÙÀ½Àº POST ¹æ½Ä Å×½ºÆ®¸¦ À§ÇÑ À¥ÆäÀÌÁöÀÌ´Ù. HTML ÄÚµå´Â ¼³¸í »ý·«Çϵµ·Ï ÇϰڴÙ. ÆäÀÌÁöÀÇ À̸§Àº post.php·Î ÇϰڴÙ.

<form action=/cgi-bin/post-cgi method=post>
À̸§ : <input type=text name=name size=16><br>
³ªÀÌ : <input type=text name=age  size=16><br>
<input type=submit name=submit>
</form>
			
´ÙÀ½Àº POST¹æ½ÄÀ¸·Î ³Ñ¾î¿Â µ¥ÀÌÅ͸¦ ¹Þ±â À§ÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. °£´ÜÇϹǷΠ¿ª½Ã ¼³¸íÀº »ý·«Çϵµ·Ï ÇϰڴÙ.
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char buf[1024]; 
    int n;   
    printf("Content-type: text/html\n\n");
    printf("Referer ÆäÀÌÁö %s<br><br>", getenv("HTTP_REFERER"));
    memset(buf, 0x00, 1024);
    while((n = read(0, buf, 1023)) > 0) 
    {
        printf("POST DATA : %s", buf); 
        memset(buf, 0x00, 1024); 
    } 
}
			
ºê¶ó¿ìÀú¿¡¼­ post.php¸¦ ºÎ¸¥´ÙÀ½ Àû´çÇÑ °ªÀ» ³Ö°í ½ÇÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.
Referer ÆäÀÌÁö http://localhost/post.php

POST DATA : name=yundream&age=21&submit=SUBMIT
			
Äõ¸® ¹®ÀÚ¿­À» ÀоîµéÀÌ´Â ¹æ¹ý¿Ü¿¡ Äõ¸® ¹®ÀÚ¿­ÀÇ ±¸¼ºÀº GET¹æ½Ä°ú µ¿ÀÏÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. ¹°·Ð Ű¿Í °ªÀ» Á¦´ë·Î ¾ò±â À§Çؼ­´Â '=','&'¸¦ ±âÁØÀ¸·Î ÆÄ½ÌÇØÁà¾ß ÇϰÚÁö¸¸ ¸»ÀÌ´Ù.


2.5. Äõ¸® ¹®ÀÚ¿­ ºÐ¼®

Äõ¸® ¹®ÀÚ¿­À» ºÐ¼®Àº ¾ð¶æ º¸¸é º°·Î ¾î·Á¿ï °Í °°Áö ¾Ê´Ù. ±ÍÂúÀ» ¼ö´Â ÀÖ°ÚÁö¸¸ '=','&'À» ±âÁØÀ¸·Î ÆÄ½ÌÇÏ´Â °Ç ±â¼úÀûÀ¸·Î ¾î·Á¿î ¹®Á¦´Â ¾Æ´Ï±â ¶§¹®ÀÌ´Ù.

±×·¯³ª ¾Ë°íº¸¸é ±×·¸°Ô °£´ÜÇÏÁö°¡ ¾Ê´Ù. post.php¿¡¼­ name¿¡ yun&dream °ú °°ÀÌ Äõ¸® ½ºÆ®¸µ ºÐ¸®¸¦ À§ÇÑ Æ¯¼ö¹®ÀÚ°¡ Æ÷ÇÔµÇ¾î ¹ö¸®´Â °æ¿ì¸¦ »ý°¢ÇØ º¸ÀÚ. ´ç¿¬È÷ Á¦´ë·Î ó¸® ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î À¥¿¡¼­ POST, GET¹æ½ÄÀ¸·Î µ¥ÀÌÅ͸¦ Àü´ÞÇÒ ¶§´Â ÀÎÄÚµù°úÁ¤ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ½ÇÁ¦ post.php¿¡ yun&dreamÀ» ÀÔ·ÂÇÑ´ÙÀ½ submit ¹öưÀ» ´©¸£¸é ´ÙÀ½°ú °°ÀÌ ÀÎÄÚµùµÈ °á°ú°¡ Ç¥½ÃµÈ´Ù.

Referer ÆäÀÌÁö http://www.joinc.co.kr/post.php

POST DATA : name=yun%26dream&age=21&submit=SUBMIT
			
&ÀÌ %25 À¸·Î ÀÎÄÚµù µÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. À¥¿¡¼­ °ªÀÇ Àü´ÞÀ» À§Çؼ­ »ç¿ëÇÏ´Â ÀÌ·¯ÇÑ ÀÎÄÚµù ¹æ½ÄÀ» urlencode ¶ó°í ÇÑ´Ù.

urlencode´Â ´ÜÁö &, = ¸¸À» ÀÎÄÚµùÇÏÁö ¾Ê´Â´Ù. [[HTML([a-zA-Z0-9\-._])]]À» Á¦¿ÜÇÑ ¸ðµç ¹®ÀÚµéÀ» º¯È¯ÇÑ´Ù. º¯È¯ ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.

	
% + ÇØ´ç¹®ÀÚÀÇ HEX°ª
			
¿¹¸¦ µé¾î¼­ * ´Â %2A ·Î ( ´Â %28 ·Î º¯È¯µÈ´Ù. ASCII Å×À̺íÀº ascii table¸¦ Âü°íÇϱ⠹ٶõ´Ù.

±×·¯¹Ç·Î CGI ÇÁ·Î±×·¥¿¡´Â À̵é urlencodeµÈ µ¥ÀÌÅ͸¦ decodeÇϱâ À§ÇÑ Äڵ尡 Æ÷ÇԵǾî¾ß ÇÑ´Ù. encode±ÔÄ¢¸¸ ¾È´Ù¸é decode ÄÚµå´Â ¾î·ÆÁö ¾Ê°Ô ÀÛ¼ºÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. urlencode °ü·ÃµÈ Äڵ带 Code_C_urlencode¿¡ Á¤¸®ÇØ µÎ¾úÀ¸´Ï Çѹø Âü°íÇØ º¸±â ¹Ù¶õ´Ù.


2.6. CGI °ü·Ã ¶óÀ̺귯¸®

Á¦´ë·ÎµÈ CGI ÇÁ·Î±×·¥À» ©·Á¸é ÀÌ°Í Àú°Í ½Å°æ½á¾ß ÇÒ°Ô Çѵΰ¡Áö°¡ ¾Æ´Ï´Ù. HTTP ÇÁ·ÎÅäÄÝ, Cookie, POST, GET, MIME, uuencode, ÆÄÀÏÀü¼Û ... À̰ÍÀ» ÀÏÀÏÀÌ ÀÛ¼ºÇϱâ¶õ ¿©°£ ±î´Ù·Î¿î°Ô ¾Æ´Ï´Ù. ±×·¡¼­ CGI ÇÁ·Î±×·¡¹Ö °ü·Ã ¸î °¡Áö ¶óÀ̺귯¸®¸¦ ¼Ò°³ÇÏ°í ±ÛÀ» ¸¶Ä¡°íÀÚ ÇÑ´Ù.


Cache Error
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.