ãã®èšäºã§ã¯ãCGIã€ã³ã¿ãŒãã§ãŒã¹å šè¬ãWindowsçšã®å®è£ ãç¹ã«CGIããã°ã©ã ãäœæããéã®ã¢ã»ã³ããªèšèªã®äœ¿çšã«ã€ããŠèª¬æããŸãã CGIã®å®å šãªèª¬æã¯ãã®èšäºã®ç¯å²ã«ã¯å«ãŸããŠããŸããããã®ããŒãã«ã€ããŠã¯ã€ã³ã¿ãŒãããäžã«åã«å€ãã®è³æããããããã§ããããã¹ãŠãèªãæå³ãããããªãããã§ãã
CGIçè«
CGI-ïŒå ±éã²ãŒããŠã§ã€ã€ã³ã¿ãŒãã§ã€ã¹ïŒ -å ±éã²ãŒããŠã§ã€ã€ã³ã¿ãŒãã§ã€ã¹ã æšæž¬ããã®ã¯é£ããããšã§ã¯ãªãã®ã§ããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããµãŒããŒïŒããã§ã¯ãµãŒããŒããã°ã©ã ïŒãšããã®ãµãŒããŒãå®è¡ãããŠããOSåãã«äœæãããå€éšããã°ã©ã ãšã®éã®ã²ãŒããŠã§ã€ãšããŠæ©èœããŸãã ãããã£ãŠãCGIã¯ãããŒã¿ããµãŒããŒããã°ã©ã ããCGIããã°ã©ã ã«ããŸããã®éã«ã©ã®ããã«è»¢éããããã«ã€ããŠè²¬ä»»ãè² ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãCGIããã°ã©ã ã®æžã蟌ã¿å¯Ÿè±¡ã«å¶éã課ããŸãããéåžžã®å®è¡å¯èœãã¡ã€ã«ãŸãã¯ãã®ä»ã®ãã¡ã€ã«ã®ããããã䜿çšã§ããŸããäž»ãªããšã¯ããµãŒããŒããããå®è¡ã§ããããšã§ãïŒããšãã°ãWindowsã§ã¯ãæ¡åŒµåã®ãããã¡ã€ã«ãä»»æã®ããã°ã©ã ã«é¢é£ä»ããããŠããŸãïŒã
CGIããã°ã©ã ãåŒã³åºããïŒããšãã°ãCGIããã°ã©ã ãžã®åŒã³åºããæ¥ç¶ãããŠãããã©ãŒã ãã¿ã³ãã¯ãªãã¯ããïŒåŸããã©ãŠã¶ãŠã£ã³ããŠã§çµæãåãåããŸã§ã次ã®ããšãçºçããŸãã
-Webã¯ã©ã€ã¢ã³ãïŒãã©ãŠã¶ãªã©ïŒã¯ãURLã§æå®ããããµãŒããŒãžã®æ¥ç¶ãäœæããŸãã
-Webã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããŸããéåžžããã®ãªã¯ãšã¹ãã¯2ã€ã®GETãŸãã¯POSTã¡ãœããã䜿çšããŠè¡ãããŸãã
-ã¯ã©ã€ã¢ã³ãã®ãªã¯ãšã¹ãããã®ããŒã¿ïŒãã©ãŒã ãã£ãŒã«ãã®å€ãªã©ïŒã¯ãCGIã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãURLã§æå®ãããCGIããã°ã©ã ã«ãµãŒããŒã«ãã£ãŠéä¿¡ãããŸãã
-CGIããã°ã©ã ã¯ããµãŒããŒããåä¿¡ããã¯ã©ã€ã¢ã³ãããŒã¿ãåŠçãããã®åŠçã«åºã¥ããŠã¯ã©ã€ã¢ã³ããžã®å¿çãçæããåãCGIã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãµãŒããŒã«æž¡ããã¯ã©ã€ã¢ã³ãã«çŽæ¥è»¢éããŸãã
-ãµãŒããŒã¯ã¯ã©ã€ã¢ã³ãããåæããŸãã
æšæºã®CGIä»æ§ã§ã¯ããµãŒããŒã¯æ¬¡ã®æ¹æ³ã§ããã°ã©ã ãšäº€æã§ããŸãã
-ç°å¢å€æ°-ããã°ã©ã ã®èµ·åæã«ãµãŒããŒã«ãã£ãŠèšå®ã§ããŸãã
-æšæºå ¥åã¹ããªãŒã ïŒSTDINïŒ-ãµãŒããŒã®å©ããåããŠããµãŒããŒã¯ããŒã¿ãããã°ã©ã ã«è»¢éã§ããŸãã
-æšæºåºåã¹ããªãŒã ïŒSTDOUTïŒ-ããã°ã©ã ã¯ç¬èªã®åºåãæžã蟌ãããšãã§ãããµãŒããŒã«éä¿¡ãããŸãã
-ã³ãã³ãã©ã€ã³-ãµãŒããŒã¯ãããã€ãã®ãã©ã¡ãŒã¿ãŒãããã°ã©ã ã«æž¡ãããšãã§ããŸãã
æšæºå ¥å/åºåã¹ããªãŒã ã¯éåžžã«äŸ¿å©ã§ãUNIXã·ã¹ãã ã§ã¯åºã䜿çšãããŠããŸãããWindowsã«ã€ããŠã¯èšããŸããããããã£ãŠãWindowsã·ã¹ãã çšã«ç¹å¥ã«éçºãããããããããWindows CGIãããããŸãã ãããããã¡ãããæšæºã®å ¥å/åºåã¹ããªãŒã ã¯Windows CGIããã°ã©ãã³ã°ã§ã䜿çšã§ããŸãã ããã§ã¯ããWindows CGIãæšæºã«ã€ããŠã¯è§ŠããŸãããå°ãªããšã2ã€ã®çç±ããããŸããæåã§æãéèŠãªçç±ã¯ãçŸæç¹ã§ã¯ãWindowsã®ãã¹ãŠã®httpãµãŒããŒããã®ä»æ§ããµããŒãããŠããããã§ã¯ãããŸããïŒç¹ã«ãç§ã®ãæ°ã«å ¥ãã®Apache 1.3.19ïŒ ã æ€çŽ¢ãšã³ãžã³ã§ãWindows CGIããšå ¥åãããšã2çªç®ã®çç±ã確èªã§ããŸãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã«é¢ããäžè¬çãªè©³çŽ°ã®ã¿ã«æ³šæããŸãããµãŒããŒããã¯ã©ã€ã¢ã³ããžã®ãã¹ãŠã®ããŒã¿ã¯ãéåžžã®windows * .iniãã¡ã€ã«ã䜿çšããŠéä¿¡ãããŸãããã®ãã¡ã€ã«ã®ååã¯ã³ãã³ãã©ã€ã³ã§ããã°ã©ã ã«æž¡ãããŸãã åæã«ããã¡ã€ã«å ã®ãã¹ãŠã®ããŒã¿ã¯æ¢ã«ãµãŒããŒã«ãã£ãŠæ éã«ã»ã¯ã·ã§ã³ã«åå²ãããŠãããGetPrivateProfile *é¢æ°ã䜿çšããŠããããæœåºããã ãã§ãã ãµãŒããŒãžã®å¿çã¯ã察å¿ããiniãã¡ã€ã«ãšã³ããªã«ååã瀺ãããŠãããã¡ã€ã«ãä»ããŠå床éä¿¡ãããŸãã
ã¯ã©ã€ã¢ã³ããCGIããã°ã©ã ã«è»¢éã§ããããŒã¿ã¯äœã§ããïŒ -ã»ãšãã©ãã¹ãŠã äžè¬ã«ãããã°ã©ã ã¯ã¯ã©ã€ã¢ã³ããå ¥åãããã©ãŒã ãã£ãŒã«ãã®å€ãåãåããŸãããä»»æã®ãã€ããªããŒã¿ãããšãã°ç»åãé³æ¥œã®ãããã¡ã€ã«ãå¯èœã§ãã ããŒã¿ã¯2ã€ã®ç°ãªãæ¹æ³ã§ãµãŒããŒã«è»¢éã§ããŸã-ããã¯GETã¡ãœãããšPOSTã¡ãœããã§ãã ããŒãžã«èšå ¥ãããã©ãŒã ãäœæãããšãããŠãŒã¶ãŒå ¥åãéä¿¡ããäžèšã®ã¡ãœããã®ãããããæ瀺çã«ç€ºããŸããããã¯ãã¡ã€ã³ãã©ãŒã ã¿ã°ã§æ¬¡ã®ããã«è¡ãããŸãã
GETã¡ãœããã䜿çšããŠããŒã¿ãéä¿¡ããå ŽåãããŒã¿ã¯ãã©ãŠã¶ã«ãã£ãŠãã©ãŒã ããèªã¿åãããçå笊ã®åŸãã®ã¹ã¯ãªããURLã®åŸã«é 眮ãããŸãããã©ãŒã ã«ããã€ãã®éèŠãªãã£ãŒã«ããããå Žåããããã¯ãã¹ãŠãïŒãã¢ã€ã³ã³ãä»ããŠéä¿¡ããããã£ãŒã«ãåãšãã®å€ã¯ã = "ã ããšãã°ããã©ãŒã ã®æåã®ãã£ãŒã«ãããyour_nameãããã³2çªç®ã®ãyour_ageããšåŒã°ããããšãèæ ®ããŠãã¹ã¯ãªããã/cgi-bin/test.exeãããã€ã³ããããŠãããã¿ã³ãã¯ãªãã¯ãããšããã©ãŠã¶ãŒããã©ãŒã ããçæããèŠæ±ã¯æ¬¡ã®ããã«ãªããŸãã
GET /cgi-bin/test.exe?your_name=Pupkin&your_age=90 HTTP / 1.0
GETã¡ãœããã䜿çšãããšãäžåºŠã«ããã€ãã®åŒ±ç¹ããããŸã-æåã§æãéèŠãªããš- ããŒã¿ã¯URLã«è»¢éãããããããã®æãéä¿¡ãããããŒã¿ã®éã«å¶éããããŸãã 2çªç®ã®åŒ±ç¹ã¯URLãããç¶ããŸã-ããã¯æ©å¯æ§ã§ããããã®ãããªè»¢éã§ã¯ãããŒã¿ã¯å®å šã«éããããŸãŸã§ãã ãããã£ãŠããã©ãŒã ã«2ã3åã®å°ããªãã£ãŒã«ãããããšäŸ¿å©ã§ããããŒã¿ãããã«ããå Žåã¯ã©ãããã°ããã§ããããã çãã¯POSTã¡ãœããã䜿çšããããšã§ãïŒ
POSTã¡ãœããã䜿çšããå ŽåãããŒã¿ã¯URLã§ã¯ãªãããŒã¿ãããã¯ãšããŠãµãŒããŒã«éä¿¡ãããŸããããã«ãããéä¿¡ãããæ å ±éãå¢å ããŸããäžèšã®POSTãã©ãŒã ã®äŸã§ã¯ããµãŒããŒã«éä¿¡ããããããã¯ã¯æ¬¡ã®ããã«ãªããŸãã
POST /cgi-bin/test.exe HTTP/1.0
Accept: text/plain
Accept: text/html
Accept: */*
Content-type: application/x-www-form-urlencoded
Content-length: 36
your_name=Pupkin&your_age=90
åè¿°ã®ããã«ããµãŒããŒã¯ããŒã¿ãåä¿¡ããåŸããããå€æããŠCGIããã°ã©ã ã«è»¢éããå¿ èŠããããŸãã æšæºCGIä»æ§ã§ã¯ãGETèŠæ±äžã«ã¯ã©ã€ã¢ã³ããå ¥åããããŒã¿ã¯ããµãŒããŒã«ãã£ãŠQUERY_STRINGããã°ã©ã ç°å¢å€æ°ã«é 眮ãããŸãã POSTãèŠæ±ããããšãããŒã¿ã¯ã¢ããªã±ãŒã·ã§ã³ã®æšæºå ¥åã¹ããªãŒã ã«é 眮ãããããããããŒã¿ãèªã¿åãããšãã§ããŸãã ããã«ããã®ãããªãªã¯ãšã¹ãã§ã¯ããµãŒããŒã¯ããã«2ã€ã®ç°å¢å€æ°-CONTENT_LENGTHãšCONTENT_TYPEãèšå®ããŸãããããã®å€æ°ã䜿çšããŠããªã¯ãšã¹ãã®é·ãããã€ãæ°ãšãã®å 容ã§å€æã§ããŸãã
ããŒã¿èªäœã«å ããŠããµãŒããŒã¯åŒã³åºãããããã°ã©ã ã®ä»ã®ç°å¢å€æ°ãèšå®ããŸãããããã®ããã€ããæäŸããŸãã
REQUEST_METHOD
ããŒã¿ã®åä¿¡æ¹æ³ã説æããŸãã
äŸïŒREQUEST_METHOD = GET
QUERY_STRING
GETã¡ãœããã䜿çšãããå Žåã®ã¯ãšãªæåå
äŸïŒQUERY_STRING = your_name = PupkinïŒyour_age = 90ïŒhobby = asm
CONTENT_LENGTH
èŠæ±æ¬æã®ãã€ãåäœã®é·ã
äŸïŒCONTENT_LENGTH = 31
CONTENT_TYPE
ãªã¯ãšã¹ãããã£ã¿ã€ã
GATEWAY_INTERFACE
CGIãããã³ã«ããŒãžã§ã³
äŸïŒGATEWAY_INTERFACE = CGI / 1.1
REMOTE_ADDR
ãªã¢ãŒããã¹ãã®IPã¢ãã¬ã¹ãã€ãŸãããã©ãŒã ã®ãã¿ã³ãã¯ãªãã¯ããã¯ã©ã€ã¢ã³ã
äŸïŒREMOTE_ADDR = 10.21.23.10
REMOTE_HOST
ãªã¢ãŒããã¹ãã®ååããã¡ã€ã³åãŸãã¯Windowsç°å¢ã®ã³ã³ãã¥ãŒã¿ãŒåãªã©ãååŸã§ããªãå Žåã¯ãã£ãŒã«ãã«ãã®IPãå«ãŸããŸãã
äŸïŒREMOTE_HOST = wasm.ru
SCRIPT_NAME
ãªã¯ãšã¹ãã§äœ¿çšãããã¹ã¯ãªããã®ååã
äŸïŒSCRIPT_NAME = / cgi-bin / gols.pl
SCRIPT_FILENAME
ãµãŒããŒäžã®ã¹ã¯ãªãããã¡ã€ã«ã®ååã
äŸïŒSCRIPT_FILENAME = cïŒ/page/cgi-bin/gols.pl
SERVER_SOFTWARE
ãµãŒããŒãœãããŠã§ã¢
äŸïŒApache / 1.3.19ïŒWIN32ïŒ
åŒã³åºãããCGIããã°ã©ã ã¯ããµãŒããŒã«ãã£ãŠèšå®ãããç°å¢å€æ°ã®ãããããèªã¿åãããããæå©ã«äœ¿çšã§ããŸãã
äžè¬ã«ãããã¯ç°¡åã«ãã¹ãŠã§ããCommonGateway Interfaceã®è©³çŽ°ã«ã€ããŠã¯ãå°éã®ããã¥ã¡ã³ããåç §ããŠãã ãããæãåºãããããã«ãã®èª¬æãäœæããŸãããç¥ããªãå Žåã¯ãç¥ã£ãŠãããŠãã ããã å®éã«äœããè©ŠããŠã¿ãŸãããã
å®çšéš
ç·Žç¿ã®ããã«ãå°ãªããšã3ã€ã®ãã®ãå¿ èŠã§ã-Windowsçšã®HTTPãµãŒããŒãWindowsçšã®Apache 1.3.19ã®ãã¹ãŠã®äŸãè©ŠããŸããããµãŒããŒã¯ç¡æã§ããiããããŠã³ããŒãã§ããŸãã
ã¯ãããšã«ãããµãŒããŒãå¿ èŠã§ã-ã©ã®ãµãŒããŒã§ãããcgi-scriptsãå®è¡ããããã«æ§æãããŠããŸãïŒ äœ¿çšããŠãããµãŒããŒã§ãããè¡ãæ¹æ³ã«ã€ããŠã¯ãããã¥ã¡ã³ããåç §ããŠãã ããã 2çªç®ã«å¿ èŠãªããšã¯ããã¡ããã¢ã»ã³ãã©ã§ãããŸããã³ã³ãã€ã©ã¯ã³ã³ãœãŒã«WIN32ã¢ããªã±ãŒã·ã§ã³ã®äœæããµããŒãããå¿ èŠããããŸããç§ã¯Tasmã䜿çšããŸãããFasmãšMasmããã³ä»ã®å€ãã®* asmã¯æ£åžžã«æ©èœããŸãã ãããŠæåŸã«ãæãéèŠãªããšã¯ããã®æ¬²æ±ãå¿ èŠã§ããããšã§ãã
ãããã£ãŠããµãŒããŒãæ£åžžã«ã€ã³ã¹ããŒã«ããã³èšå®ããããããindex.htmlãã¡ã€ã«ã¯ãµãŒããŒããã¥ã¡ã³ãã®ã«ãŒããã£ã¬ã¯ããªã«ãããã¢ãã¬ã¹127.0.0.1ãå ¥åãããšãã©ãŠã¶ãŒã«æ£åžžã«è¡šç€ºãããŸãã ãŸãããµãŒããŒãã©ã«ããŒã®èéã®ã©ããã«ãã¹ã¯ãªããã®å®è¡ãèš±å¯ãããŠããcgi-binãã©ã«ããŒãããããšãèæ ®ããŸãã
ãµãŒããŒã®ã»ããã¢ããã確èªããåæã«å°ããªã¹ã¯ãªãããäœæããŸãããã ã¹ã¯ãªããã¯éåžžã®* .batãã¡ã€ã«ã«ãªããŸãã ç§ã¯è³ªåãäºèŠããŸã-ã©ããã£ãŠïŒ æ¬åœã«ïŒ ã¯ããããã¯éåžžã®ããããã¡ã€ã«ã§ããåè¿°ã®ãšãããCGIä»æ§ã§ã¯ãã¡ã€ã«ã¿ã€ããåºå¥ããŠããŸãããäž»ãªããšã¯ããµãŒããŒããããèµ·åã§ããããšã§ãããããŠã圌ã¯ãstdin / stdoutããã³ç°å¢å€æ°ãbatãã¡ã€ã«ãå®å šã§ã¯ãããŸããããããšãã°ãç§ãã¡ã¯éåžžã«æºè¶³ããŠããŸãã 次ã®å 容ã®ãã¡ã€ã«ãäœæããŸãããã
@echo off
rem
echo Content-type: text/html
echo.
rem
echo "!<br>
echo " GET : %QUERY_STRING%
ãã¡ã€ã«test.batãåŒã³åºããŠãã¹ã¯ãªãããå®è¡ããããã®ãã£ã¬ã¯ããªã«é 眮ããŸããã»ãšãã©ã®å Žåããcgi-binããã£ã¬ã¯ããªã«ãªããŸãã 次ã«è¡ãå¿ èŠãããã®ã¯ãäœããã®æ¹æ³ã§ãã®ã¹ã¯ãªãããåŒã³åºãããšã§ããååãšããŠããã©ãŠã¶ã®ã¢ãã¬ã¹ãŠã£ã³ããŠã«æ¬¡ã®ãhttp://127.0.0.1/cgi-bin/test.batããå ¥åããããšã§çŽæ¥å®è¡ã§ããŸãããã¡ã€ã³ããŒãžããåŒã³åºããè¡ããåæã«GETã¡ãœããã®åäœã確èªããŸãã ãµãŒããŒã«ãŒãã«æ¬¡ã®å 容ã®index.htmlãã¡ã€ã«ãäœæããŸãã
<html> <head> <meta content = "text / html; charset = windows-1251" http-equiv = Content-Type> </ head> <ãã©ãŒã å= "ãã¹ã"ã¡ãœãã= getã¢ã¯ã·ã§ã³= "/ cgi-bin / test.bat"> <center> <table border = 1 cellspacing = 0> <tr bgcolor = "ïŒe0e0e0"> <td colspan = 2> <font face = arial size = 2> <center> <b>ãµãŒããŒã«è»¢éããããŒã¿ãå ¥åããŸãïŒ</ b> </ center> </ font> </ td> </ tr> <tr> <td> <font face = arial size = 2> <b>ããŒã¿ïŒ</ b> </ font> </ td> <td> <font face = arial size = 2> <textarea rows = "3" cols = "55" warp = "physical" name = "data"> </ textarea> </ font> </ td> </ tr> <tr bgcolor = "ïŒe0e0e0"> <td colspan = 2> <center> <å ¥åã¿ã€ã= "éä¿¡"å€= "éä¿¡ïŒ"> </ center> </ td> </ tr> </ table> </ center> </ form> </ body> </ html>
ãµãŒããŒïŒãã©ãŠã¶ãŒã®ã¢ãã¬ã¹ããŒã«http://127.0.0.1ïŒãå ¥åãããšããã©ãŒã ã衚瀺ãããããã«äœããå ¥åããŠ[éä¿¡]ãã¿ã³ãã¯ãªãã¯ããŸãããã¹ãŠãæ£ããè¡ãããå Žåããã©ãŠã¶ãŒãŠã£ã³ããŠã«bat-ã®çãã衚瀺ãããŸãã¹ã¯ãªããã ããã§ã¯ãäœãåŸããããèŠãŠã¿ãŸãããã
ãæ³åã®ãšãããechoã³ãã³ãã¯stdoutã«åºåããŸããæåã«è¡ãããšã¯ããµãŒããŒã«å¿çã®ããããŒãéä¿¡ããããšã§ã-echo Content-typeïŒtext / htmlã ããã¯CGIä»æ§ã®æšæºçãªèŠåºãã§ããããã¹ããŸãã¯htmlããã¥ã¡ã³ããéä¿¡ãããããä»ã®ããããŒããããŸãã éåžžã«éèŠãªãã€ã³ã-ããããŒã¯ç©ºã®è¡ã§å¿çæ¬æããåé¢ããå¿ èŠããããŸããããã¯æ¬¡ã®ã³ãã³ããechoããã§è¡ããŸãã 次ã«ãå¿çã®æ¬æèªäœã転éãããŸã-ããã¯éåžžã®htmlããã¥ã¡ã³ãã§ããããããããããããã«ããµãŒããŒããæž¡ãããç°å¢å€æ°ã®1ã€ã衚瀺ããŸãããã®å€æ°allã§GETã¡ãœããïŒããã¯ãŸãã«ãŠãŒã¶ãŒãå ¥åããããŒã¿ãã¹ã¯ãªããã®å¿çã§ç¢ºèªã§ããŸãã ãã¡ã€ã«ã®æåŸã®2è¡ã«ãechoãã®çŽåŸã«ãåŒçšç¬Šãæ£ãããªããããšã«æ°ä»ãå ŽåããããŸããããã¯ãbatãã¡ã€ã«ã®ç¹ç°æ§ã®ããã«ãããŸããhtmlã¿ã°ã¯ã<ãããã³ã>ãåæã«ããããã®ã·ã³ãã«ã¯ãbatãã¡ã€ã«ã®å ¥å/åºåã®ãªãã€ã¬ã¯ããšããŠæ©èœãããããããã§ã¯èªç±ã«äœ¿çšã§ããŸããã
ãã®ãããªbatã¹ã¯ãªãããå°ãè©ŠããŠã¿ãããšããå§ãããŸããéåžžã«äŸ¿å©ã§ããä»ã®ç°å¢å€æ°ãèŠãŠã¿ãŠãã ããã å°ã話ãæ»ããŸãããUNIXã·ã¹ãã ã§ã¯ãã·ã§ã«èšèªã¯éåžžã«éçºãããŠãããã·ã§ã«èšèªã®ããã°ã©ãã³ã°ãšãå®éã®ãããã°ã©ãã³ã°èšèªã®ããã°ã©ãã³ã°ãšã®å¢çç·ã¯éåžžã«ææ§ãªå ŽåããããŸããããã¯ã³ãã³ãã€ã³ã¿ãŒããªã¿ãŒã®èšèªã§ãããwindows-interpreter cmd.exeãŸãã¯ä»¥åã®command.comã¯æããã«ãããã®ç®çã«ã¯åŒ±ãã§ãã
ããã§ã¯ãå®éã«ã¢ã»ã³ãã©ãŒã§CGIããã°ã©ã ãäœæãããšããããã®èšäºã®æãéèŠãªã¿ã¹ã¯ã«ç§»ããŸãããã ååãšããŠãCGIã«é¢ããäžèšã®ãã¹ãŠãèæ ®ãããšãCGIã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯ããã°ã©ã ãå¿ èŠã§ãããšçµè«ä»ããããšãã§ããŸãã
- ããã°ã©ã ã¯ãPOSTã¡ãœããã«ãã£ãŠéä¿¡ãããããŒã¿ã«ã¢ã¯ã»ã¹ããããã«ãæšæºå ¥åã¹ããªãŒã ïŒstdinïŒãèªã¿åããå¿ èŠããããŸãã
- ããã°ã©ã ã¯ãäœæ¥ã®çµæããµãŒããŒã«è»¢éããããã«ãæšæºåºåã¹ããªãŒã ïŒstdoutïŒã«æžã蟌ãããšãã§ããå¿ èŠããããŸãã
- æåã®2ã€ã®ãã€ã³ãããããµãŒããŒãstdinã®ããã°ã©ã ã«äœããæž¡ããstdoutã§ããã«å¿çã§ããããã«ããã«ã¯ãCGIããã°ã©ã ãã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã§ãªããã°ãªããŸããã
- ç§ãã¡ã®ããã°ã©ã ã¯ããã®ç°å¢ã®å€æ°ãèªã¿åãããšãã§ããã¯ãã§ãã
ããã§å®å šãªCGIã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
æåŸã®æ®µèœããå§ããŸãããã Windowsã¢ããªã±ãŒã·ã§ã³ã®ç°å¢å€æ°ã«ã¢ã¯ã»ã¹ããã«ã¯ãGetEnvironmentStrings APIé¢æ°ã䜿çšããŸããé¢æ°ã«ã¯åŒæ°ããªãããŒãã§åºåãããç°å¢å€æ°ïŒNAME = VALUEïŒã®é åãžã®ãã€ã³ã¿ãŒãè¿ããŸãããµãŒããŒãããã°ã©ã ç°å¢ã«å ããŠããã°ã©ã ãéå§ãããšãé åã¯äºéãŒãã§éããããŸãæšæºå€æ°ã«ã¯äžèšã®ç¹å®ã®CGIå€æ°ãè¿œå ãããŸãããã³ãã³ãã©ã€ã³ããããã°ã©ã ãèµ·åãããšããã¡ãã衚瀺ãããŸããã
stdoutã«äœããæžã蟌ãããŸãã¯stdinããèªã¿åãã«ã¯ããŸããããã®ã¹ããªãŒã ã®ãã³ãã«ãååŸããå¿ èŠããããŸããããã¯ãAPIé¢æ°ãGetStdHandleãã䜿çšããŠè¡ããã次ã®å€ã®ãããããé¢æ°ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããŸãã
- STD_INPUT_HANDLE-stdinïŒæšæºå ¥åïŒ;
- STD_OUTPUT_HANDLE-stdoutïŒæšæºåºåïŒ;
- STD_ERROR_HANDLE-stderrã®å Žåã
ãã®é¢æ°ã¯ãèªã¿åã/æžã蟌ã¿æäœã«å¿ èŠãªãã³ãã«ãè¿ããŸãã 次ã«è¡ãå¿ èŠãããã®ã¯ããããã®ã¹ã¬ããã®æžã蟌ã¿/èªã¿åãã§ãã ããã¯ãéåžžã®ãã¡ã€ã«ã®èªã¿åã/æžã蟌ã¿æäœãã€ãŸã ReadFileããã³WriteFileã ããã«ã¯åŸ®åŠãªç¹ã1ã€ãããŸãããããã®ç®çã§WriteConsole / ReadConsoleã䜿çšã§ãããšæããããããŸãããã¯ããããã¯ã³ã³ãœãŒã«ã«ãšã£ãŠæ¬åœã«å ¬å¹³ã§ãããããŸãæ©èœããŸããçµæã¯WriteFileãšåæ§ã«ã³ã³ãœãŒã«ã«è¡šç€ºãããŸãããããã¯å®è¡ãããŸã§ç¶ããŸããµãŒããŒäžã®ã¹ã¯ãªãããšããŠã®ããã°ã©ã ã ããã¯ãããã°ã©ã ããµãŒããŒãèµ·åãããšãGetStdHandleé¢æ°ã«ãã£ãŠè¿ãããæ»ãå€ãã³ã³ãœãŒã«ã®ãã³ãã«ã§ã¯ãªãããã€ããã³ãã«ã«ãªãã2ã€ã®ã¢ããªã±ãŒã·ã§ã³ãæ¥ç¶ããããã«å¿ èŠã«ãªãããã§ãã
CGIã¢ã»ã³ãã©ããã°ã©ã ãã©ã®ããã«èŠãããã瀺ãå°ããªäŸã次ã«ç€ºããŸãã
.386
.model flat,stdcall
includelib import32.lib
.const
PAGE_READWRITE = 4h
MEM_COMMIT = 1000h
MEM_RESERVE = 2000h
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
.data
hStdout dd ?
hStdin dd ?
hMem dd ?
header:
db 'Content-Type: text/html',13,10,13,10,0
start_html:
db ' CGI- : <br>',13,10,0
for_stdin:
db ' STDIN : <br>',13,10,0
end_html:
db '',13,10,0
nwritten dd ?
toscr db 10 dup (32)
db ' - ',0
.code
_start:
xor ebx,ebx
call GetStdHandle,STD_OUTPUT_HANDLE
mov hStdout,eax
call GetStdHandle,STD_INPUT_HANDLE
mov hStdin,eax
call write_stdout, offset header
call write_stdout, offset start_html
call VirtualAlloc,ebx,1000,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
mov hMem,eax
mov edi,eax
call GetEnvironmentStringsA
mov esi,eax
next_symbol:
mov al,[esi]
or al,al
jz end_string
mov [edi],al
next_string:
cmpsb
jmp short next_symbol
end_string:
mov [edi],'>rb<'
add edi,3
cmp byte ptr [esi+1],0
jnz next_string
inc edi
stosb
call write_stdout, hMem
call write_stdout, offset for_stdin
call GetFileSize,[hStdin],ebx
mov edi,hMem
call ReadFile,[hStdin],edi, eax,offset nwritten, ebx
add edi,[nwritten]
mov byte ptr [edi],0
call write_stdout, hMem
call write_stdout, offset end_html
call VirtualFree,hMem
call ExitProcess,-1
write_stdout proc bufOffs:dword
call lstrlen,bufOffs
call WriteFile,[hStdout],bufOffs,eax,offset nwritten,0
ret
write_stdout endp
extrn GetEnvironmentStringsA:near
extrn GetStdHandle:near
extrn ReadFile:near
extrn WriteFile:near
extrn GetFileSize:near
extrn VirtualAlloc:near
extrn VirtualFree:near
extrn ExitProcess:near
extrn lstrlen:near
ends
end _start
å®è¡å¯èœãã¡ã€ã«ã¯ã次ã®ã³ãã³ãã«ãã£ãŠæ§ç¯ãããŸãã
tasm32.exe / ml test.asm
tlink32.exe / Tpe / ap / o test.obj
ããã°ã©ã ãã³ã³ãœãŒã«ã§ããããšãå¿ããªãã§ãã ããã
äžèšã®htmlãã©ãŒã ã䜿çšããŠãã®ããã°ã©ã ãåŒã³åºãããšãã§ããŸãããã©ãŒã ã®test.batãšããååãtest.exeã«å€æŽãããããã/ cgi-bin /ã«ã³ããŒããã ãã§ããªã¯ãšã¹ãã¡ãœããã§POSTãèšå®ããããã°ã©ã ã§åŠçã§ããŸãã
ãŸããå¥ã®æ¹æ³ã§ããã°ã©ã ãåŒã³åºãããšãã§ããŸããcgi-binãã£ã¬ã¯ããªã«ãã¡ã€ã«ãäœæããããšãã°ãïŒïŒCïŒ/ _ path_ / test.exeããšãã1è¡ã§test.cgiãäœæãããªã¯ãšã¹ãã§ãµãŒããŒãåŒã³åºããŸãã次ã«ãæåã®è¡ãèªã¿åã£ãŠexeãã¡ã€ã«ãå®è¡ããŸãããã®ããã* .cgiæ¡åŒµåããã¹ã¯ãªããã®æ¡åŒµåãšããŠhttp-serverã®èšå®ã«æžã蟌ãŸããŠããå¿ èŠããããŸãã ãã®ã¢ãããŒãã§ã¯ããµãŒããŒã¯ã³ãã³ãã©ã€ã³ãtest.exe path_to_test.exeãã§ããã°ã©ã ãèµ·åããŸããããã«ã¯ããã€ãã®å©ç¹ããããŸã-æåã«ã¹ã¯ãªãããå®è¡ãã人ã¯ã¹ã¯ãªãããäœã«æžãããŠãããããç¥ããªããšããããšã§ããããšãã°ãã¹ã¯ãªããçšã«ãã®ãã¡ã€ã«ã«è¡ã®ãã¡ã€ã«åãè¿œå ãããšããã¹ãŠã®ã€ã³ã¿ãŒããªã¿ãŒããã®ããã«åäœããããããããã°ãç°¡åã«ãªããŸã-ãã¹ãŠã®perl / php / etcããã°ã©ã ã«ãããŒã ã€ã³ã¿ãŒã³èªäœã« éèš³ã ãããã£ãŠããµãŒããŒã¯ãcgi-programãèµ·åãããšãã«ãããã°ã©ã æ¡åŒµåãèšå®ã§ã¹ã¯ãªãããšããŠæžã蟌ãŸããŠããå Žåããã¡ã€ã«ã®æåã®è¡ãèªã¿åããäžèšã®åœ¢åŒã§ããããšãå€æããå Žåãã¹ããŒã¹ãä»ããŠãã®ãã¡ã€ã«ã®ååã®è¡ã«ç€ºãããŠããããã°ã©ã ãèµ·åããŸãè¡ã¯çç éèš³è ã瀺ããŠããŸã;ãã®ãããªèŽãç©ãåãåããšããã®å®è¡ãéå§ããŸãããªããªã çç ã®ã³ã¡ã³ãã¯ãïŒãèšå·ã§ãããæåã®è¡ãã¹ãããããã¹ã¯ãªãããããã«å®è¡ããŸããäžè¬ã«ãç©äºã¯äŸ¿å©ã§ãã