微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题用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('<HTML>');
  WRITELN('<HEAD>');
  WRITELN('<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=GB2312">');
  WRITELN('<TITLE>星河创作室 &GT;&GT; CGI测试</TITLE>');
  WRITELN('</HEAD>');
  WRITELN('<BODY BGCOLOR="#000000" TEXT="#FFFFFF" LINK="#00FF00" VLINK="#00FFFF"
  ALINK="#FFFF00">');
  GETENVIRONMENTVARIABLE('REQUEST_METHOD',TESTSTR,SIZEOF(TESTSTR));
  WRITELN('星河创作室');
  WRITELN('<BR>');
  FOR CGIVARS:=LOW(CGIVAR) TO HIGH(CGIVAR) DO
  BEGIN
  CGISTR:=CGIVAR[CGIVARS];
  GETENVIRONMENTVARIABLE(PCHAR(CGISTR),TESTSTR,SIZEOF(TESTSTR));
  WRITELN(CGISTR+': '+TESTSTR);
  WRITELN('<BR>');
  END;
  //FOR 为依次以CGIVAR数组中的CGI环境变量名来读取CGI环境变量,然后发给浏览器。
  WRITELN('</BODY>');
  WRITELN('</HTML>');
  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('<BR>');
  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),进行交流)。