用CLIPPER编写CGI程序 宋永强 2000年 第33期 DBASE的历史实在是辉煌,但如今它已失去了许多光彩,也不再拥有往日众多的追随者,只有在邮局、税务、客房管理等特定用途上才能看到它的身影,因为人们很难找到有关资料把它与互联网联系在一起。通过CGI的帮助,我终于把它应用于互联网上。 CGI(Common Gateway Interface,公共网关接口)的作用是把客户端浏览器发出的请求通过WWW服务器软件的管理把SERVER上的数据反映到客户端的浏览器上。CGI程序也是程序,而且在这里我们讲的是用CLIPPER写的程序。 首先我们需要把环境建立起来: 1.在一台WIN9x或NT计算机上安装SAMBAR公司(http://www.sambar.com)的SERVER,它是完全免费的,内建WWW、FTP及各种代理功能。建议你使用 SAMBAR的4.2版本,因为其它版本对CGI的支持有些问题。在安装时一定要注意不要使用其默认的安装路径(c:\program files\sambar),可以把它装在c:\sambar里,因为CLIPPER不支持长文件夹名或文件名。它是一个绿色软件,不向注册表添加任何内容。 2.启动SAMBAR,打开浏览器就可以进入WEB方式的管理界面了,建议你把它配置一下,把WWW服务的端口从80改成8080,防止与你计算机上的其它WWW服务器相冲突(如PWS或IIS等)。 3.把CLIPPER5.01安装在你的计算机上,后面我们将用它编程(假设你把它装在了d:\clipper5里面)。 说明:下面的例子运行的环境是浏览器和SERVER同时在一台计算机上,也可以把SERVER装在一台单独的计算机上,用另一台计算机的浏览器显示,此时必须为计算机分配IP地址,而不是使用localhost。 如果你的计算机上没安装其它WWW服务器,就不用修改端口。下面的例子都是假设你把端口改成了8080。软件安装好后,你会发现有一个c:\sambar\cgi-win的文件夹,它是系统默认的,你也可以更改默认CGI路径。以后我们开发所有的Windows CGI程序都将放在这个文件夹里。 下面我们先编一个非常简单的程序: 在D:\CLIPPER5\BIN里用EDIT编一个叫TEST1的PRG程序,它的功能是在浏览器上显示HELLO WORLD,程序如下: TEST1.PRG Parameters IN1, IN2, IN3 SIZE=200 buffer=space(SIZE) Target=in3 infile=fcreate(Target) buffer=″HTTP/1.0 200 OK″+chr(13) p=len(buffer) fwrite(infile,buffer,p) buffer=″″+chr(13) p=len(buffer) fwrite(infile,buffer,p) buffer=″
为了接收TEST3.HTM的数据,需要写一个TEST3.PRG,内容如下: parameters in1, in2, in3 SIZE=200 buffer=space(SIZE) buffer2=space(SIZE) infile=fopen(in2) oufile=fcreate(in3) num_read=fread(infile,@buffer,200) buffer2=″HTTP/1.0 200 OK″+chr(13) p=len(buffer2) fwrite(oufile,buffer2,p) buffer2=″″+chr(13) p=len(buffer2) fwrite(oufile,buffer2,p) ch=″″ tbf=″″ mm=1 epos=0 do while .t. ch=substr(buffer,mm,1) if ch!=″&″ tbf=tbf+ch mm=mm+1 if ch==″=″ epos=mm endif else exit endif enddo buffer2=substr(tbf,epos,2) use d:\clipper5\bin\acc.dbf go val(buffer2) buffer2=ACNUMBER+″″+chr(13) p=len(buffer2) fwrite(oufile,buffer2,p) use fclose(infile) 把TEST3.PRG编译后存到 C:\SAMBAR\CGI-WIN文件夹下,在浏览器的URL处输入 http://localhost:8080/test3.htm,在文本框内输入记录号后按“确认”,相应记录的ACNUMBER就会显示在浏览器上。上面的HTM也可以直接换成EXE文件,由EXE文件生成HTM文档。 上面的这些程序都能正常运行,但有些勉强(除错处理、变量分离都需要细化)。写本文的目的仅在于介绍CLIPPER实现CGI的方法而不是具体的编程。