機能説明
普段は何もページ上に表示されていないけどキリ番になると・・・
メッセージを表示
メッセージを表示
訪問者数が1000とかきりのいい数、ゴロのいい数など、
見るとちょっぴり幸せな気分に浸れる数字(以下この数字をキリ番と表記)
のときページにメッセージを表示するCGIスクリプト。
キリ番以外の時は何もページ上に表示しません。
普通、htmlの一部分のテキスト文を動的に表示させるにはSSIを使用する必要があるのですが、
このスクリプトではCGIの呼び出し及びメッセージの表示に
JavaScriptを使用してCGIでもhtmlにテキストを表示できるようにしました。
- 上2桁以外0(例:1000、35000)
- ゾロ目(例:1111)
- 上2桁の数字の繰り返し(例:1212、35353)
- 1からの降順、昇順連番(例:123、123456789、4321、654321)
- 上記判定条件は上2桁の数字の繰り返しはカウンタの数字が4桁以上、その他は3桁以上
また、キリ番とする数字をユーザー側で追加することも可能です。
キリ番のときに表示するメッセージはランダムにすることが可能です。
Download
設定
設置例
+--- index.html(メッセージを表示したいページ) | +--- /cgi-bin(CGIが動作するディレクトリ)[707 or 705] | +-- mnmdisp.cgi [755 or 705] | (スクリプトファイル) +-- count.log [666 or 606] (カウントデータ保存ファイル) ※[]内の数字はパーミッション 各ファイルが上記のような位置関係にある場合、index.htmlのソースでメッセージを表示したい場所に <SCRIPT language="JavaScript" src="cgi-bin/mnmdisp.cgi"></SCRIPT> <NOSCRIPT><IMG src="cgi-bin/mnmdisp.cgi?joff" height="1" width="1" border="0"></NOSCRIPT> を挿入。
mnmdisp.cgi初期設定
- #!usr/bin/perl
-
Perlまでのパス。各自設置したサーバーに基づいたパスに変更してください。
たいていは#!/usr/local/bin/perlのはずです。 - $countdata = 'count.log';
- カウントデータ保存ファイル名およびパス
- $lockfile = 'lockfile.loc';
- ファイルロック用ファイル名およびバス(特別な場合を除き変更不要です)
- @usrdef_no = ();
-
キリ番のユーザー定義。
()内に追加された数字はキリ番と判定されます。
複数の数字を追加する場合は各数字をカンマ(",")で区切ってください。 - @rdm_msg = (
'Congratulation! You are <>th visitor.',
'Yeeah!! \"\;<>\"\; hits! - So What?',
'What\'s up!'
); -
キリ番のときに表示されるメッセージ。ここで設定したものがランダムで表示されます。
"<>"をメッセージ内に入れると、その部分はカウント数に置き換わります。
"'"、 ";"、 ","、 "@"、 "\"、 "#"などをメッセージ内に使用する場合
各記号の前に"\"をつけてください。(例:' → \'、@ → \@)
また、"""、"&"、"<"、">" についてはそれぞれ
"\"\;"、"\&\;"、"\<\;"、"\>\;"とする必要があります
メッセージを表示したいページの設定
メッセージを表示したいページのソース内に以下のタグを書き加えてください。
これを書き加えた場所にキリ番時にメッセージが表示されます。
ファイルまでのパスは各自の環境に合わせてください。
これを書き加えた場所にキリ番時にメッセージが表示されます。
<SCRIPT language="JavaScript" src="(ファイルまでのパス)/mnmdisp.cgi"></SCRIPT>
<NOSCRIPT><IMG src="(ファイルまでのパス)/mnmdisp.cgi?joff" height="1" width="1" border="0"></NOSCRIPT>
<NOSCRIPT><IMG src="(ファイルまでのパス)/mnmdisp.cgi?joff" height="1" width="1" border="0"></NOSCRIPT>
ファイルまでのパスは各自の環境に合わせてください。
パーミッション設定
mnmdisp.cgi : [755 または 705]
count.log : [666 または 606]
count.log : [666 または 606]
サーバー側でcgiファイルのパーミッションの指定があればそちらに従ってください。
その他
# Script Check Mode
http://(ファイルまでのパス)/mnmdisp.cgi?check
上のURLにアクセスすると
・ 現在のカウント数
・ カウントデータを保存するファイル(count.log)のパス、存在、パーミッションの確認
・ ランダムメッセージの表示テスト
ができます。
http://(ファイルまでのパス)/mnmdisp.cgi?check
上のURLにアクセスすると
・ 現在のカウント数
・ カウントデータを保存するファイル(count.log)のパス、存在、パーミッションの確認
・ ランダムメッセージの表示テスト
ができます。
更新履歴
Ver 2.3.1 (2002/03/24)
- とある機能を拡張しようとしたが失敗。この話はなかったことに
- 説明を修正
- エラー処理(sub error)でJavaScriptが無効なときは1×1pxの透過gifを出力するようにした
- 上記変更に伴いサブルーチン名を変更:javaoff -> dummyimg
- sub cheki内の無駄な力技コードを修正、削除。
- キリ番のユーザー定義の数字は1からの降順昇順連番の配列に追加する方式だったのをやめ、
それぞれ別の配列を使いスクリプトの設定部分を見やすくした。 - 無駄なコード、説明コメント削除。
- カウントデータ保存ファイルの拡張子を.txtから.logに変更。
- 説明コメント修正。
- ソースを見やすくしたら動かなくなっていたので間違っていた部分を直す。
正規表現の"=~"を"= ~"ってやっちゃってた。。 - スクリプトファイル名をMNMDisp.cgi→mnmdisp.cgiに変更。
理由はデバック時のURL入力がめんどくさいから(ぉ - スクリプト説明コメントを追加。もちろん逝っちゃってる英語で(はぁと
- バージョン表記を変更。
- ようやく一般配布開始。
- とある機能追加。これで晒されても時間稼ぎが可能w
- ソースが見やすくなるように少し修正。(=の両脇に半角スペース入れたりとか)
- Script Check Mode用のサブルーチンの名前を変更。(元名:check)
チェキ(ぇ?
- JavaScriptが無効になっていてもカウントアップだけはするようにしてみる。
(メッセージは表示されない) - キリ番を判定する部分のコードを大幅に書き換える。
これにより無駄なコードを6行ほど削ることに成功。 - 利便性を考えてメッセージの設定をスクリプトの最初のほうに持ってこれるように改良
- 胡散臭い英語でスクリプト説明コメントを入れる。間違っている自信あります(爆
- キリ番をユーザー側で定義できるように改良。
ある意味手抜きとも〜(滅 - キリ番のときのメッセージをランダムに表示できるようにしてみた。
- Script Check Modeで現在のカウント、ランダムメッセージのチェックができるように。
- それなりに使えそうになったのでこのバージョンからベータ(b)をとってみる。
- count.txtの有無およびパーミッションのチェックをするScript Check Mode機能追加
- その他細かい修正
- とりあえず作ってみた。
動作確認
Local :
OS : Microsoft Windows 2000 professional sp2
Perl : ActivePerl 5.6.1.629
HTTPd : AN HTTP Server 1.39e
Browser : Microsoft Internet Explorer 5.01 sp2 / Mozilla 0.9.5
CGI 動作確認サーバー :
Tkcity Web Service
OS : Microsoft Windows 2000 professional sp2
Perl : ActivePerl 5.6.1.629
HTTPd : AN HTTP Server 1.39e
Browser : Microsoft Internet Explorer 5.01 sp2 / Mozilla 0.9.5
CGI 動作確認サーバー :
Tkcity Web Service
問題点
- 閲覧者のブラウザの設定でJavaScriptが有効になっていないとメッセージが表示されない
-
仕様です。あきらめてください。
JavaScriptに対応していない、もしくは対応していても
外部jsファイルを読み込めないブラウザも同様にメッセージが表示されません。 - ファイルロックにopen関数使ってるからカウンタ飛びやすいかも
-
いちおうopen関数を使ってロックするだけでなく、データを書き込んだ一時ファイルを
rename関数つかってcount.logにリネームするようにしてあるので
いくらかはましだと思いますが。。
今後の予定
- カウンタ数を画像で出力することは絶対にしません
- ファイルロックの方法を変えるかも
雑記
(編集途中)