第83章と第84章までのカウンターは 文字でカウント数を表示していました。
実際のホーム・ページのカウンタはほとんどの場合グラフィックスで表示されていますね。 これを実現するにはどうしたらよいでしょうか。まずは、最も簡単な方法で実現してみます。
左の図のようなカウンターはインターネット上でよく見かけますね。
まずは、HTML側のソースを見てみましょう。
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>カウンター</TITLE> </HEAD> <BODY> <CENTER> <H1>猫でもわかるカウンター</H1> <HR> <!--#exec cmd="imgcounter01.cgi"--><BR> </CENTER> </BODY> </HTML>これを見てもわかるように、SSIで実現しています。 実際には、cmd="cgi-bin/imgcounter01.cgi"というようにcgiプログラムを 置く場所は決められた位置になります。 (ほとんどのプロバイダはSSIを禁止しているのが 実情ですが・・・)
数字の0から9までのGIF画像も用意しておきます。このGIFのファイル名を 0.gif, 1.gif, 2.gif,...とします。自分で作るかフリーの素材 をネット上で探して用意しておきます。
また、htmlを置いてあるディレクトリにimgというディレクトリを作りここに 数字の画像ファイルを置いておきます。
また、logというディレクトリを作っておき、ここにcount.logというテキストファイルを 作っておき0と書いておきます。
では、プログラムを見てみましょう。
// imgcounter01.c #define CNTF "log/count.log" #include <stdio.h> #include <stdlib.h> #include <process.h> int main() { char buf[256], ncnt[16]; FILE *fp; int cnt, newcnt, i, keta; fp = fopen(CNTF, "r"); if (fp == NULL) { printf("1 error!"); exit(-1); } fscanf(fp, "%d", &cnt); fclose(fp); newcnt = cnt + 1; itoa(newcnt, ncnt, 10); keta = (int)strlen(ncnt); fp = fopen(CNTF, "w"); if (fp == NULL) { printf("2 error"); exit(-2); } fprintf(fp, "%d", newcnt); fclose(fp); for (i = 0; i < keta; i++) { sprintf(buf, "<IMG SRC=\"img/%c.gif\">", ncnt[i]); printf(buf); } return 0; }ファイルから数値を読み出してこれに1を加えたものを、今回表示する数値とします。 これをnewcntとします。
newcntを文字列に変換します(ncnt)。この文字列の文字数(ヌル文字を除く)が 数値の桁数となります。
先頭の桁の文字はncnt[0],次の文字はncnt[1],...となります。
従ってこれらの文字のGIFT画像を桁数だけIMGタグで表示すればよいですね。
Update Mar/19/2003 By Y.Kumei