电脑报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(′$#@60;HTML$#@62;′);
WRITELN(′$#@60;HEAD$#@62;′);
WRITELN(′$#@60;META HTTP-EQUIV=″CONTENT-TYPE″ CONTENT=″TEXT/HTML; CHARSET=GB2312″$#@62;′);
WRITELN(′$#@60;TITLE$#@62;星河创作室 >> CGI测试$#@60;/TITLE$#@62;′);
WRITELN(′$#@60;/HEAD$#@62;′);
WRITELN(′$#@60;BODY BGCOLOR=″#000000″ TEXT=″#FFFFFF″ LINK=″#00FF00″ VLINK=″#00FFFF″
ALINK=″#FFFF ?#@62;′);
GETENVIRONMENTVARIABLE(′REQUEST_METHOD′,TESTSTR,SIZEOF(TESTSTR));
WRITELN(′星河创作室′);
WRITELN(′$#@60;BR$#@62;′);
FOR CGIVARS:=LOW(CGIVAR) TO HIGH(CGIVAR) DO
BEGIN
CGISTR:=CGIVAR[CGIVARS];
GETENVIRONMENTVARIABLE(PCHAR(CGISTR),TESTSTR,SIZEOF(TESTSTR));
WRITELN(CGISTR+′: ′+TESTSTR);
WRITELN(′$#@60;BR$#@62;′);
END;
//FOR 为依次以CGIVAR数组中的CGI环境变量名来读取CGI环境变量,然后发给浏览器。
WRITELN(′$#@60;/BODY$#@62;′);
WRITELN(′$#@60;/HTML$#@62;′);
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(′$#@60;BR$#@62;′);
END;
下面是输入信息分解模块(上面的模块中要使用):
FUNCTION EXTRACTFROMDATA(DATA,TAG:STRING):STRING;
VAR NPOS:INTEGER;
BEGIN
NPOS:=POS(TAG+′=′,DATA);
IF NPOS$#@62;0 THEN
BEGIN
RESULT:=COPY(DATA,NPOS+1+LENGTH(TAG),LENGTH(DATA)-NPOS);
NPOS:=POS(′&′,RESULT);
IF NPOS$#@62;0 THEN RESULT:=COPY(RESULT,1,NPOS-1);
END ELSE RESULT:=′′;
END;
好了,一个简单的CGI程序已经完成了,你可以做一个网页试一下CGI的效果。下面就要靠你自己努力了,祝你早日成为CGI高手。
“七”乐无穷,尽在新浪新版博客,快来体验啊~~~请点击进入~