CGI在网络中可是元老了。几年前,遍地都是CGI,那才叫流行。不过现在CGI好像少了。不管它,我们先写个CGI的计数器玩玩。
CGI其实并不神秘,它只是个普普通通的EXE文件。理论上说,写CGI是可以用任何编程语言的。不过,CGI是要在服务器上运行的。现在的服务器大都是Unix的,Unix上似乎没有可以编译Pascal、Basic之类程序的东西。所以,我们还是用C语言写吧!
打开C语言编辑器,写下这段代码:
#include <stdio.h> #include <stdlib.h> #include <dir.h> void main(void) { /* 语句部分,可以写任何C/C++语句 */ FILE *myFile; long counter=0; char buffer[8]; int i; if((myFile=fopen("./counter/counter.txt","r"))!=NULL) { fscanf(myFile,"%ld",&counter); fclose(myFile); } counter++; if((myFile=fopen("./counter/counter.txt","w"))==NULL) { mkdir("counter"); if((myFile=fopen("./counter/counter.txt","w"))==NULL) exit(0); } fprintf(myFile,"%ld",counter); fclose(myFile); /* 这个计数器有8位。 */ sprintf(buffer,"%08ld",counter); /* Html部分,使用printf将标准的Html代码输出客户浏览器上。 */ /* 在输出Html前,你必须先写CGI必须的一句。 */ printf("Contenttype:text/plain\n\n"); /* 然后输出Html代码。 */ printf("<html>\n\n"); printf("<head>\n"); printf("<title>计数器</title>\n"); printf("</head>\n\n"); printf("<body>\n"); for(i=0;i<8;i++) /* 你使用时,这个路径要修改。 */ printf("<img src=./counter/%c.gif>",buffer[i]); printf("\n<body>\n"); }写完了,接下来我们试验试验,看看它好不好用。首先,编译它。由于我在Windows下使用PWS做试验,因此我使用VC++或Borland C++把它编译成Windows Console程序。注意,一定要使用Windows Console。我把它编译成for Dos的使用,结果导致PWS停止响应。如果你使用其它服务器,请使用相应的编译器。例如,Unix上使用这个程序就得使用gcc编译。
从上面的例子你也看出来了,CGI缺点的确很多,譬如不易开发、变更修改成本高、不易侦错、执行速度慢等,而且由于并非整合于HTML文档之中,因此必须使用与HTML完全不同的设计过程来设计一个可执行的应用程序。随着科技的发展,一种更先进的服务器脚本:ASP出现了。
ASP的代码是嵌在Html中的,这样,我们的工作量就小多了。还是先写个计数器试试吧!
<html> <head> <title>计数器</title> </head> <body> <p><% '前面的部分都是标准的Html代码 '“< %”、“ % >”中间围的是ASP代码。 on error resume next '获取本网站在服务器上的路径 file=server.MapPath(".\counter\counter.txt") '打开文件并读出以前的来访数量 set fileacc=server.CreateObject("Scripting.FileSystemObject") set myFile=fileacc.OpenTextFile(file) visitors=myFile.readline myFile.close '增加一人,存回去 visitors=visitors+1 set myFile=fileacc.CreateTextFile(file) myFile.WriteLine(visitors) myFile.close strlength=len(visitors) '使用Response.Write方法生成Html代码 for i=1 to 8-strlength Response.Write"<img src=counter/0.gif>" next for i=1 to strlength Response.Write "<img src=counter/" & mid(visitors,i,1) & ".gif>" next set fileacc=nothing %></p> </body> </html>按照上面CGI的方法存好图片和这个ASP脚本,注意扩展名一定要是.asp,然后在浏览器中试验。感觉怎么样?ASP是不是简单多了?