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是不是简单多了?