• ベストアンサー

HTMLにCGIカウンターを

初歩的なCGI(Perl)のアクセスカウンターの作り方を学びました。 今まではHTMLでHPを作成していました。そこでトップページにアクセスカウンターを付けたいのですが、当然のことながら今のトップページは「index.html」ファイルです。このファイルにCGIによるアクセスカウンターをつける場合、「index.html」のファイルを一から「index.cgi」ファイルにPerlで書き換えなければならないのでしょうか。今の「index.html」の一部分を書き換えるだけでCGIのアクセスカウンターが設置できないものでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.2

SSIが使える場合は print "Content-type: text/html\n\n$cnt"; だけをprintして、 <!--#include virtual="counter.cgi" --> のようにHTMLのカウント値を表示したい場所にタグを打ち込めばいいと思います。いわゆるテキストカウンタの一般的な例ってやつです。 SSIが使えない場合は、画像カウンターにしてしまうのもいいと思います。アクセス方法は、<img>タグで行います。 <img src="counter.cgi" /> ちなみに、画像カウンターのやり方は外部のライブラリ(gifcatなど)を使うのがいいと思います。 http://www.tohoho-web.com/wwwsoft.htm 以下、自分の書いたことのあるスクリプトを記述します。参考にしてください。(画像カウンターの表示ルーチン部分のみ) require "gifcat.pl"; my@num=split(//, $cnt); foreach(@num){$_ = "imgdir/$_.gif"} binmode(STDOUT); print "Content-type: image/gif\n\n"; print &gifcat::gifcat(@num); このソースでは、カウンターと同じ位置のimgdirフォルダ内に、0~9.gifというgifファイルを置き、カウンターと同じ位置にgifcat.plを置いておきます。 また、以下も参考になると思います http://www.site-cooler.com/kwl/cgi/4.htm#source

その他の回答 (2)

  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.3

ソースなら、こんな感じ open( my$FH, "+<count.dat" ) || die "File open error, stopped"; my$cnt = <$FH>; #カウントアップ $cnt++; seek($FH, 0, 0); print $FH $cnt; close($FH); # gifcat呼び出し require "gifcat.pl"; # 数字を画像ファイル名に my@num=split(//, $cnt); foreach(@num){$_ = "imgdir/$_.gif"} # 出力する binmode(STDOUT); print "Content-type: image/gif\n\n"; print &gifcat::gifcat(@num); exit 0; 以上が画像カウンター。 注意点としては、 count.datが無ければならない。中に初期値として0が入っているとBest。 imgdirというフォルダの中に0~9.gifの、10個のgifファイルが無ければならない。 gifcat.plが無ければならない。 open( my$FH, "+<count.dat" ) || die "File open error, stopped"; my$cnt = <$FH>; #カウントアップ $cnt++; seek($FH, 0, 0); print $FH $cnt; close($FH); print "Content-type: text/html\n\n$cnt"; exit 0; 以上がテキストカウンター。また、HTMLに <!--#include virtual="counter.cgi" --> と書かなければならない。あと、ホームページをアップロードする先のサーバーで、SSIが有効になっていなければならない。 ソースをかなり書き換えてしまっているけれど、機能は同じです。

panda-2005
質問者

お礼

ありがとうございます。 SSIは利用可能なようなのです。 SSIに関しては全くの無知なので勉強してみようと思います。 ソース活用さしてもらいます。

  • satosi1
  • ベストアンサー率30% (11/36)
回答No.1

一部分だけでよいですが、CGIを設置したことがあるだけで、作った事はないため自信がありません。とりあえず、ソースを教えてください。

panda-2005
質問者

補足

#!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<body>\n"; print "<head><title>○○○</title></head>\n"; print "<body>\n"; print "<h1>○○○</h1><hr>\n"; #カウンタ読み込み if( open( FH, "count.dat" ) ){ $cnt = <FH>; close(FH); #カウントアップ $cnt++; #カウンタ表示 print "<center>あなたは${cnt}人目の訪問者です。</center>\n"; #カウンタ書き込み if( open( FH, ">count.dat" ) ){ print FH $cnt; close(FH); } else{ print "ファイル書き込オープンに失敗しました。\n"; } } else{ print "ファイル読み込オープンに失敗しました。\n"; } print "</body>\n"; print "</html>\n"; __END__ 以上が私の簡単なCGIのカウンターになります。

関連するQ&A