用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=″

HELLO WORLD


″+chr(13)    p=len(buffer)    fwrite(infile,buffer,p)    buffer=″″+chr(13)    p=len(buffer)    fwrite(infile,buffer,p)   fclose(infile)   接下来用CLIPPER5提供的CL.BAT程序,把它编译并存放在C:\SAMBAR\CGI-WIN下面,然后在浏览器的URL处输入 http://localhost:8080/cgi-win/test1.exe并回车。HELLO WORLD几个大字就会跃然于你的浏览器上。   限于篇幅所限,我只能讲些简单的例子,更实用的例子留给你自已完成吧,有问题可发E-mail到 rockoil@263.net。   下面我们进行第二个例子TEST2.PRG。它的功能是打开一个数据库把其中ACNUMBER字段中的内容显示到浏览器上。在进行本例之前,你应准备一个D:\CLIPPER5\BIN\ACC.DBF数据文件,里面有一个ACNUMBER字段(CHAR型的),并且随便在里面添加20条以上记录。   TEST2.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=″

AC-NO LIST


″+chr(13)    p=len(buffer)    fwrite(infile,buffer,p)   use d:\clipper5\bin\acc.dbf    for I=1 to 20 ACCONTENT=ACNUMBER   buffer=ACCONTENT+″
″+chr(13)    p=len(buffer)   fwrite(infile,buffer,p)   skip(1)   next   use    buffer=″″+chr(13)    p=len(buffer)    fwrite(infile,buffer,p)   fclose(infile)   把它编译后拷到c:\sambar\cgi-win文件夹下,在浏览器下执行http://localhost:8080/cgi-win/test2.exe并回车。数据库中的的20条记录就会显示在用户的浏览器上。   下面我再讲第三个例子TEST3.PRG,将HTML表单与CIPPER5的程序结合起来,完成查询工作。TEST3.PRG的功能是,在HTML表单上输入一个数字(记录号),CGI程序自动把相应的记录显示给用户的浏览器。你把它改一下就能变成一个电话号码或住址查询程序。   TEST3.PRG   默认情况下,你的ROOT目录是 C:\SAMBAR\DOCS文件夹,先写一个TEST3.HTM并放在那个文件夹下。         THIS IS TEST3         请输入记录号:   

  

        
        为了接收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的方法而不是具体的编程。