用Delphi编写CGI程序 汪继梁 2000年 第24期   随着Internet时代的来临,为WWW(World Wide Web)编写程序已经变得越来越普遍起来。大量的数据库应用和其他一些较为复杂的操作使得HTML越来越无法满足我们的需要,就算是JavaScript也只能完成一些较为简单的程序,所以众多主页都使用了CGI。许多刚开始制作个人主页的“菜鸟”也渴望了解CGI的编程技术,下面我介绍一下CGI的编程方法。   首先,你必须会一种编译型的编程语言,如:Dlephi。然后,你需要一个Web服务器,如果没有的话,可以免费去微软的网站下载一个Personal Web Server。   下面就让我们开始吧!   先建立一个没有窗体的控制台应用程序(注:向代码中添加{SAPPTYPE CONSOLE}使程序转为控制台应用程序),然后输入相应的代码如下:   PROGRAM XHCGI;   {SAPPTYPE CONSOLE}   USES   WINDOWS,SYSUTILS;   CONST   CGIVAR:ARRAY[1..22]OF STRING[30]=   (′SERVER_NAME′,   ′SERVER_PROTOCOL′,   ′SERVER_PORT′,   ′SERVER_SOFTWARE′,   ′PATH_TRANSLATED′,   ′PATH_INFO′,   ′REMOTE_HOST′,   ′REMOTE_USER′,   ′REMOTE_ADDR′,   ′REMOTE_IDENT′,   ′REQUEST_METHOD′,   ′GATEWAY_INTERFACE′,   ′DOCUMENT_ROOT′,   ′SCRIPT_NAME′,   ′QUERY_STRING′,   ′HTTP_REFERER′,   ′HTTP_ACCEPT′,   ′HTTP_USER_AGENT′,   ′HTTP_FROM′,   ′CONTENT_TYPE′,   ′CONTENT_LENGTH′,   ′CONTENT_COOKIE′);   //一些常用的CGI环境变量。   VAR   TESTSTR:ARRAY[0..255]OF CHAR;   BEGIN   WRITELN(′CONTENT TYPE:TEXT/HTML′);   WRITELN;   WRITELN(′′);   WRITELN(′′);   WRITELN(′′);   WRITELN(′星河创作室 >> CGI测试′);   WRITELN(′′);   WRITELN(′′);   GETENVIRONMENTVARIABLE(′REQUEST_METHOD′,TESTSTR,SIZEOF(TESTSTR));   WRITELN(′星河创作室′);   WRITELN(′
′);   FOR CGIVARS:=LOW(CGIVAR) TO HIGH(CGIVAR) DO   BEGIN   CGISTR:=CGIVAR[CGIVARS];   GETENVIRONMENTVARIABLE(PCHAR(CGISTR),TESTSTR,SIZEOF(TESTSTR));   WRITELN(CGISTR+′: ′+TESTSTR);   WRITELN(′
′);   END;   //FOR 为依次以CGIVAR数组中的CGI环境变量名来读取CGI环境变量,然后发给浏览器。   WRITELN(′′);   WRITELN(′′);   END.   在浏览器的地址栏中输入程序的地址,运行一下,你可以看到一些CGI环境变量。如Web服务器的主机名、HTTP请求的协议、Web 服务器的名称与版本等等。   其实,以上的程序只是读取一些CGI环境变量,并没有实际的意义。使用CGI最主要的目的是要读取浏览器中HTML窗体送出的数据信息。   代码如下:   PROCEDURE GETPOST;   VAR   STRVAR,STRTEST:STRING;   STRLEN:ARRAY[0..10]OF CHAR;   BEGIN   GETENVIRONMENTVARIABLE(′QUERY_STRING′,STRLEN,SIZEOF(STRLEN));   //读取浏览器HTML窗体送出的信息   SETLENGTH(STRVAR,STRTOINTDEF(STRLEN,100));   READLN(STRVAR);   STRTEST:=EXTRACTFROMDATA(STRVAR,′NAME′);   //读取名为NAME的输入框中的输入信息   STRTEST:=NAMECRC(STRTEST);   WRITELN(′姓名:′+STRTEST);   WRITELN(′
′);   END;   下面是输入信息分解模块(上面的模块中要使用):   FUNCTION EXTRACTFROMDATA(DATA,TAG:STRING):STRING;   VAR NPOS:INTEGER;   BEGIN   NPOS:=POS(TAG+′=′,DATA);   IF NPOS>0 THEN   BEGIN   RESULT:=COPY(DATA,NPOS+1+LENGTH(TAG),LENGTH(DATA)-NPOS);   NPOS:=POS(′&′,RESULT);   IF NPOS>0 THEN RESULT:=COPY(RESULT,1,NPOS-1);   END ELSE RESULT:=′′;   END;   好了,一个简单的CGI程序已经完成了,你可以做一个网页试一下CGI的效果。下面就要靠你自己努力了,祝你早日成为CGI高手(如果你在CGI编程中遇到问题,可以写信给我(E-mail:xinghesoft@8848.net),进行交流)。