用CLIPPER编写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=″<html>″+chr(13)
p=len(buffer)
fwrite(infile,buffer,p)
buffer=″<body><H1><center>HELLO WORLD</center></H1><br>″+chr(13)
p=len(buffer)
fwrite(infile,buffer,p)
buffer=″</body></html>″+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=″<html>″+chr(13)
p=len(buffer)
fwrite(infile,buffer,p)
buffer=″<body><H1><center>AC-NO LIST</center></H1><br>″+chr(13)
p=len(buffer)
fwrite(infile,buffer,p)
use d:\clipper5\bin\acc.dbf
for I=1 to 20
ACCONTENT=ACNUMBER
buffer=ACCONTENT+″<br>″+chr(13)
p=len(buffer)
fwrite(infile,buffer,p)
skip(1)
next
use
buffer=″</body></html>″+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并放在那个文件夹下。
<html>
<title>
THIS IS TEST3
</title>
<body>
请输入记录号:
<p>
<form action=″/cgi-win/test3.exe″ method=post>
<input type=text name=aaaa value=1>
<input type=submit name=bbbb value=″ 确认 ″>
</form>
</body>
</html>
为了接收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=″<html>″+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+″</html>″+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的方法而不是具体的编程。