Luna-cryin' >> Laboratory > Perl de CGI >

CGI by Perl #001 : Memorial Number Message Displayer


機能説明

pl001_01.png 330×100 (1KB)   普段は何もページ上に表示されていないけどキリ番になると・・・

pl001_02.png 330×100 (2KB)  メッセージを表示


訪問者数が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

>> mnmdisp0231.zip

(version 2.3.1 - last update 2002/03/24)


設定

設置例

+--- 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!! \&quot\;<>\&quot\; hits! - So What?',
    'What\'s up!'
);
キリ番のときに表示されるメッセージ。ここで設定したものがランダムで表示されます。
"<>"をメッセージ内に入れると、その部分はカウント数に置き換わります。
"'"、 ";"、 ","、 "@"、 "\"、 "#"などをメッセージ内に使用する場合
各記号の前に"\"をつけてください。(例:' → \'、@ → \@)
また、"""、"&"、"<"、">" についてはそれぞれ
"\&quot\;"、"\&amp\;"、"\&lt\;"、"\&gt\;"とする必要があります

メッセージを表示したいページの設定

メッセージを表示したいページのソース内に以下のタグを書き加えてください。
これを書き加えた場所にキリ番時にメッセージが表示されます。

<SCRIPT language="JavaScript" src="(ファイルまでのパス)/mnmdisp.cgi"></SCRIPT>
<NOSCRIPT><IMG src="(ファイルまでのパス)/mnmdisp.cgi?joff" height="1" width="1" border="0"></NOSCRIPT>

ファイルまでのパスは各自の環境に合わせてください。

パーミッション設定

mnmdisp.cgi : [755 または 705]
count.log : [666 または 606]

サーバー側でcgiファイルのパーミッションの指定があればそちらに従ってください。

その他

# Script Check Mode

http://(ファイルまでのパス)/mnmdisp.cgi?check

上のURLにアクセスすると
・ 現在のカウント数
・ カウントデータを保存するファイル(count.log)のパス、存在、パーミッションの確認
・ ランダムメッセージの表示テスト
ができます。


更新履歴

Ver 2.3.1 (2002/03/24)
  • とある機能を拡張しようとしたが失敗。この話はなかったことに
  • 説明を修正
Ver 2.3.0 (2001/11/09)
  • エラー処理(sub error)でJavaScriptが無効なときは1×1pxの透過gifを出力するようにした
  • 上記変更に伴いサブルーチン名を変更:javaoff -> dummyimg
  • sub cheki内の無駄な力技コードを修正、削除。
Ver 2.2.0 (2001/10/30)
  • キリ番のユーザー定義の数字は1からの降順昇順連番の配列に追加する方式だったのをやめ、
    それぞれ別の配列を使いスクリプトの設定部分を見やすくした。
  • 無駄なコード、説明コメント削除。
Ver 2.1.2 (2001/10/24)
  • カウントデータ保存ファイルの拡張子を.txtから.logに変更。
  • 説明コメント修正。
Ver 2.1.1 (2001/10/14)
  • ソースを見やすくしたら動かなくなっていたので間違っていた部分を直す。
    正規表現の"=~"を"= ~"ってやっちゃってた。。
  • スクリプトファイル名をMNMDisp.cgi→mnmdisp.cgiに変更。
    理由はデバック時のURL入力がめんどくさいから(ぉ
  • スクリプト説明コメントを追加。もちろん逝っちゃってる英語で(はぁと
  • バージョン表記を変更。
  • ようやく一般配布開始。
Ver 2.1 (2001/10/10)
  • とある機能追加。これで晒されても時間稼ぎが可能w
  • ソースが見やすくなるように少し修正。(=の両脇に半角スペース入れたりとか)
  • Script Check Mode用のサブルーチンの名前を変更。(元名:check)
    チェキ(ぇ?
Ver 2.0 (2001/10/05)
  • JavaScriptが無効になっていてもカウントアップだけはするようにしてみる。
    (メッセージは表示されない)
  • キリ番を判定する部分のコードを大幅に書き換える。
    これにより無駄なコードを6行ほど削ることに成功。
  • 利便性を考えてメッセージの設定をスクリプトの最初のほうに持ってこれるように改良
  • 胡散臭い英語でスクリプト説明コメントを入れる。間違っている自信あります(爆
Ver 1.0 (2001/10/03)
  • キリ番をユーザー側で定義できるように改良。
    ある意味手抜きとも〜(滅
  • キリ番のときのメッセージをランダムに表示できるようにしてみた。
  • Script Check Modeで現在のカウント、ランダムメッセージのチェックができるように。
  • それなりに使えそうになったのでこのバージョンからベータ(b)をとってみる。
Ver 0.5b (2001/09/30)
  • count.txtの有無およびパーミッションのチェックをするScript Check Mode機能追加
  • その他細かい修正
Ver 0.1b (2001/09/29)
  • とりあえず作ってみた。


動作確認

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


問題点

閲覧者のブラウザの設定でJavaScriptが有効になっていないとメッセージが表示されない
仕様です。あきらめてください。
JavaScriptに対応していない、もしくは対応していても
外部jsファイルを読み込めないブラウザも同様にメッセージが表示されません。
ファイルロックにopen関数使ってるからカウンタ飛びやすいかも
いちおうopen関数を使ってロックするだけでなく、データを書き込んだ一時ファイルを
rename関数つかってcount.logにリネームするようにしてあるので
いくらかはましだと思いますが。。


今後の予定

  • カウンタ数を画像で出力することは絶対にしません
  • ファイルロックの方法を変えるかも


雑記

(編集途中)



Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!