トップ > Perl Tips > テキストカウンタを作ろう


 ■ テキストカウンタを作ろう

SSIの基礎編:SSIとは

カウンタというのは、ページの訪問回数を数えるもので、
この「テキストカウンタ」というのは、テキストで数字を出すものです。

カウンタですので、HTMLも作ってみたいと思います。
SSIを使って、CGIを呼び出して、カウンタを表示させます。


<スクリプト>


#!/usr/bin/perl

# ログファイル名を指定
$log = "counter.dat";

open(IN,"$log");
flock(IN, 1);
$count = <IN>;
close(IN);

$count++;

open(OUT,"> $log");
flock(OUT, 2);
print OUT $count;
close(OUT);

print "Content-type: text/html\n\n";
print $count;
<HTMLファイル>
<HTML>
<HEAD>
<TITLE>テキストカウンタ</TITLE>
</HEAD>
<BODY>
<P>テキストカウンタ</P>
<P>あなたは&nbsp;<!--#exec cgi="counter.cgi" -->&nbsp;人目のお客様です。</P>
</BODY>
</HTML>
Perlスクリプトをcounter.cgi、HTMLファイルをcounter.shtmlなどの名前で保存します。
このほかに、counter.datというファイルも作ってください。
counter.datには、「0」と、入力しておいてください。


<スクリプト解説>
# ログファイル名を指定
ここは特に変える必要はありませんが、ログファイル名を変えた場合には必ず変更してください。

open(IN,"$log");
(中略)
close(IN);
ログファイルを読み込みます。

$count++;
ここで、カウント数を1つアップします。

open(OUT,"> $log");
(中略)
close(OUT);
新しいカウント数を保存します。


<HTMLファイル解説>
<!--#exec cgi="counter.cgi" -->
ここが一番重要です。
これを使って、カウンタを起動させ、数字を表示させます。


サンプルはこちらです。

<参考>(by通りすがりさん)
掲示板からご意見をいただきましたのでこちらに掲載いたします。

これなんですけど、SSIが使えないサーバの為にJavascript版も用意した方が良いですよ。
PerlスクリプトをJavaScript形式にするには、print "Content-type: text/html\n\n";の部分をprint "Content-Type: application/x-javascript\n\n";に直します。
後は
print <<"EOM";
document.write("$count");
EOM
と言う風にしてやればOKです。
Scriptの始めに「$ssi = 1;#SSIなら1、そうでない場合は0」としてやり、if($ssi == 0){print "Content-type: text/html\n\n";}else{print "Content-Type: application/x-javascript\n\n";}ってな風にやるの良いかもしれません。

また、HTMLファイルのカウンタの位置に以下のタグを挿入して、スクリプトを呼び出します。
<script language="JavaScript" src="counter.cgi"></script>





トラックバック

このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/48