WwwCounter は、以下の機能・特徴をもったWeb用カウンターです。
ダウンロード後、Lhasa などの解凍ツールで解凍してください。
実行イメージは、「とほほのWWW入門」 のトップページ右下をご覧ください。
1997.03.16 初版。(Ver1.00) 1997.04.10 シグナル処理の追加。(Ver1.10) 1997.04.28 大幅改造/テスト機能追加/GIF連結機能。(Ver2.00) 1997.05.08 ロックファイルが残ってしまうバグを修正。(Ver2.10) 1997.05.11 %7E や \~ を ~ に変換/自URLは表示しないようにした。(Ver2.20) 1997.07.06 10分以上古いロックファイルを消すようにした。(Ver2.30) 1997.09.14 メールのサブジェクトに前日のアクセス件数を表示。(Ver2.40) 1997.10.19 自己診断機能の強化。(Ver2.50) 1998.02.15 セキュリティ改善。hide+で.gifしか読み取れないようにした。(Ver2.60) 1998.09.20 SSIで使用する際に text の引数を不要とした。(Ver2.70) 1998.11.29 複数カウンターに対応した。(Ver2.80) 1998.12.20 カウンター破壊対処/SIGPIPE対応。(Ver2.81) 1999.01.17 複数カウンターのバグ対応。(Ver2.91) 1999.01.17 日付ファイルが空だとレポートが送れないバグ対応。(Ver2.92) 1999.05.30 nkfを使用しないようにした。(Ver3.00) 1999.06.06 ロックファイルのパーミッションを755から0755に修正。(Ver3.01) 1999.06.27 同一アドレスチェック機能の初期値をオフに修正。(Ver3.02) 1999.10.03 誤ってロックファイルを消してしまうことがあるバグを修正。(Ver3.03) 1999.10.03 nameオプションのセキュリティホールに対処。(Ver3.04) 1999.10.03 時刻も記録するよう変更。(Ver3.05) 1999.12.12 nameオプションのセキュリティホール対処が誤っていた(Ver3.06) 2000.01.03 2000年問題対応。(Ver3.07) 2000.12.03 IPアドレスからホスト名への変換機能をサポート。(Ver3.10) 2001.05.01 説明文などの変更。(Ver3.11) 2002.03.24 From: を指定可能に。(Ver3.13) 2002.06.10 gifcat.plの改版(Netscape 6.*のバグ対応)。(Ver3.14) 2002.06.10 @ARGVの代わりに$ENV{QUERY_STRING}を参照。(Ver3.14) 2002.06.10 SSIモードでREFERERをロギングするように修正。(Ver3.14) 2003.03.23 フォルダ変更時のテストがうまく動作しなかったのを修正。(Ver3.15)
Webサーバーが、Perl による CGI をサポートしている必要があります。CGI を設置するのが初めての方は最初に、簡単な CGI の設置を練習してみてください。(参考:「とほほのCGI入門」)
wwwcount.cgi ファイルの中の、★ 印の部分を、適切に修正してください。最初は必須項目のみを修正して、ステップバイステップで設置テストしてみるのがよいでしょう。
wwwcount.cgi などのファイルやフォルダ(readme.htm を除く)を Web サーバーに転送してください。Windows マシンから、FTP を用いてサーバーにアップロードする場合は、GIF画像をバイナリモードで、その他のファイルをテキストモードで転送してください。(参考:「改行コードについて」)
サーバーの OSにあわせて、ファイルやフォルダのパーミッションを次のように変更してください。(参考:「パーミッションについて」)
ファイル名 フォルダ名 | パーミッション (UNIX系の場合) | アクセス権 (Windows系の場合) |
---|---|---|
wwwcount.cgi | 755 | 読み込み権 |
wwwcount.cnt | 666 | 読み込み&書き込み権 |
wwwcount.dat | 666 | 読み込み&書き込み権 |
wwwcount.acc | 666 | 読み込み&書き込み権 |
lock | 777 | 読み込み&書き込み権 |
BIGLOBE などのように、CGI が設置ユーザーの権限で動作する場合は、666 の代わりに 644、777 の代わりに 755 でも構いません。
カウンターを貼り付けたいページに、以下のコードを貼り付ければ、設置完了です。使用する画像ファイルに応じて、width や height は適切に調節してください。
<img src="wwwcount.cgi?gif" width=96 height=18 alt="Counter">
カウンター用の画像は下記のサイトなどに数多くあります。入手した画像ファイルを、0.gif 〜 9.gif という名前にして、上記のものと置き換えても構いません。
Webサーバーが、Perl による CGI をサポートし、かつ、SSI をサポートしている必要があります。SSI を設置するのが初めての方は最初に、簡単な SSI の練習をしてみてください。(参考:「とほほのSSI入門」)
前述の「CGIグラフィックモードの設置方法」を参考に、CGIグラフィックモードのカウンターを設置してください。
カウンターを貼り付けたいページに、以下の SSI コードを貼り付ければ、設置は完了です。
<!--#exec cgi="wwwcount.cgi text"-->
最近は、SSI に引数を指定できないプロバイダも増えているので、その場合は、wwwcount.cgi の $mode = ""; という行を、$mode = "text"; に書き換えて、次のように呼び出してください。
<!--#exec cgi="wwwcount.cgi"-->
wwwcount.cnt ファイルに 100 と記述しておけば、カウンターの初期値を 100 からはじめることができます。
100
その日の最初のアクセスがあった時点で、前日までのアクセスログが自分宛にメール送信されてくる機能をサポートしています。実行には、サーバー側に sendmail コマンドが必要です。レポート送信機能を使用する場合は、wwwcount.cgi の ★項目のうち、下記の値を適切に設定してください。
$mailto = ''; $mailfrom = ''; $sendmail = '/usr/lib/sendmail'; $account_detail = 1; $do_addr_to_host = 0; $my_url = '';
隠しカウンタ機能とは、一見カウンタとは思えないアイコン(ネコやウサギなど)を表示しているけど、実はそれがカウンタ・・・というものです。CGIグラフィックモードで使用可能です。「wwwcount.cgi?gif」の gif の代わりに、「hide+画像名」を指定してください。例えば、neko.gif を表示するには次のようにしてください。
変更前:<img src="wwwcount.cgi?gif" 略...> 変更後:<img src="wwwcount.cgi?hide+neko.gif" 略...>
隠しカウンタのカウント数は、レポート機能や、wwwcount.cnt ファイルを直接参照することで確認できます。
CGIグラフィックカウンターを以下のように呼び出すと、自分のホームページがどこからリンクされているのか発見することができます。
<script type="text/javascript"> <!-- xx = escape(document.referrer); yy = ""; for (i = 0; i < xx.length; i++) { zz = xx.charAt(i); yy += (zz == "+") ? "%2B" : zz; } document.write('<img width=96 height=19 '); document.write('src="wwwcount.cgi?gif'); document.write('+ref+', yy, '">'); // --> </script> <noscript> <img width=96 height=19 src="wwwcount.cgi?gif"> </noscript>
発見した情報は wwwcount.acc ファイルに FROM 項目として蓄積されますので、レポート送信機能で送信するようにしてください。
ただし、JavaScript をサポートしたブラウザが、JavaScript をオフにして参照した場合、カウントアップされないという制限が発生しますのでご注意ください。また、ブラウザによっては、リンク元の情報を送ってこなかったり、嘘のリンク元情報を送ってくるものがあります。この場合は正確なリンク元は取得できませんので、ご了承ください。
wwwcount.cgi の中の「$figure = 5;」という行の 5 を 6 に変更すれば、カウンターを6桁で表示できるようになります。この時、<img> タグの width 属性を調整するようにしてください。
まず、wwwcount.cnt、wwwcount.acc、wwwcount.dat と同じ要領で、サーバー側に wwwcount2.cnt、wwwcount2.acc、wwwcount2.dat ファイルを作成してください。カウンターを貼り付ける部分を、次のように変更することで、別のカウンターとして動作させることができます。
CGIグラフィックカウンターの場合:
変更前:<img src="wwwcount.cgi?gif" 略...> 変更後:<img src="wwwcount.cgi?gif+name+wwwcount2" 略...>
SSIテキストカウンターの場合:
変更前:<!--#exec cgi="wwwcount.cgi text"--> 変更後:<!--#exec cgi="wwwcount.cgi text name wwwcount2"-->
wwwcount2 を、wwwcount3、wwwcount4... としていけば、3個目、4個目のカウンターを設置することができます。名前は、wwwcount2 でも、aabbcc のようなまったく別の名前でも構いません。
ブラウザがアニメーションGIFに対応していなかったり、アニメーションGIF機能がオフになっている場合、カウンターの1桁目しか表示されません。
lock フォルダの下に、wwwcount.loc という名前のフォルダが作成されたまま残ってしまうことがあります。その際は、wwwcount.loc フォルダを削除してから再度テストしてみてください。
SSI モードでグラフィックカウンタを、CGI モードでテキストカウンタを表示することはできません。
カウンターを貼り付けたページは http://〜 や https://〜 で始まる名前でアクセスしてください。file://〜 や C:\ で始まる名前でアクセスした場合は動作しません。
CGI の設置方法は、ご利用のサーバーやプロバイダによって異なります。不明な点がある場合は、「とほほのCGI入門」や、プロバイダの CGI 設置に関する説明を参照してください。
Netscape 6.1 の場合、最上位の桁が横に伸びて表示されてしまうという問題があるようです。他のGIFアニメソフトを利用しても同様の結果となることから、1枚目の画像の大きさが全体の画像の大きさと異なるときにうまく表示できないという、Netscape 6.1 のバグによるものと推測しています。(2001.10.27追記) → Ver3.14 で、とりあえず、Netscape のバグを回避するコードを埋め込みました。(2002.6.10追記)
同じIPアドレスからのアクセス時はカウントアップしない場合や、プロキシサーバーのキャッシュなどの理由により、同じキリ番を複数の人がゲットすることがあります。
カウンターがうまく動かない時は以下の手順に従って調べて見てください。
テスト1
「とほほのCGI入門」の「CGIの設置方法」に従って、簡単なCGIが動作するかどうか確認してください。
テスト2
ブラウザの[ファイル]→[(場所を指定して)開く] から、「http://〜/〜/wwwcount.cgi?test」と入力して、開いてください。「〜」の部分には適切なサーバー名やフォルダ名を指定してください。CGIスクリプトが上手く動作していれば「OK. You can use CGI script.」と表示されます。また、何か不備がある場合は、「NG. 不備の原因」も表示されます。このテストが失敗する原因として以下のことが考えられます。
テスト3
[ファイル]→[(場所を指定して)開く] から「http://〜/wwwcount.cgi?text」を入力して、カウンター数値が表示されるか調べてください。これがうまくいかない原因としては以下のことが考えられます。
テスト4
「http://〜/wwwcount.cgi?gif」を入力して、GIFイメージのカウンター数値が表示されるか調べてください。これがうまくいかない原因としては以下のことが考えられます。
その外、再表示をちゃんと行っているか、画像の読み込みモードはオンになっているかなど、「とほほのCGI入門」の「CGIスクリプト作成時の注意」を参照してください。それでもうまく動かないときは、質問メールを受け付けています。上記のテスト結果など詳しい状況を記載の上、「杜甫々へメールを送る」を参照して送付ください。
gifcat.pl は、GIF 画像を連結するPerl用フリーソフトライブラリです。改造、利用、転載、再配布など自由です。GIF アニメーションの機能を用いて、同じ大きさの複数の画像を横方向に並べます。Unisys 社の特許には抵触しないことを確認済みです。以下のように使用します。
require "gifcat.pl"; binmode(STDOUT); print &gifcat'gifcat("xxx.gif", "yyy.gif", "zzz.gif");