现在,几乎每一个小站都要有一个计数器,用来记录有多少人访问了你的主页。许多大网站也都为业余斑竹们提供了免费计数器。
  不过,免费计数器有许多缺点:不能自由修改,加载页面时要链接到计数器提供者的网站上,效率较低。所以我们还是自己做一个吧!什么,说我自己都没有计数器还来教别人?冤枉呀!不是我不会做计数器,而是网管姐姐给我的权限实在太低了,没法做。权限虽低,她却给了我100MB呀!所以我舍不得到别处申请空间。
  废话少说,书归正传。

  在正式制作前,我们先要准备10张写有0~9的数字的图片,命名为“1.gif”、“2.gif”、“3.gif”等等。如果你不想做的话,可以右键单击这几张图“另存”到你机子上。
  我一分钟内赶出来的,不好看,见笑了:

1. 传统的CGI计数器

  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编译。
  编译完了,我们再把得到的Exe扩展名改为“.cgi”,然后,复制到PWS的虚拟网站根目录下。在这个目录下建一个counter目录,把10张数字图片复制进去。然后打开浏览器,输入“http://localhost/test.cgi”(或你定义的名字),怎么样,数字出来了吗?
  使用CGI是很麻烦的,这个例子中,我们仅仅显示几个数字,还不显得太麻烦。如果要把计数器嵌入网页中(当然要嵌入,不然光光的几个数字有什么意思?),工作量简直不可想象。如果你想做成网页计数器的话,本期的Html2Cgi转换工具也许可以帮你一点忙。

2. 新型的ASP计数器

  从上面的例子你也看出来了,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是不是简单多了?
  祝大家都有自己的计数器,祝大家的计数器早日溢出。