CGI,活用講座、第9回 |
|
ダウンロード&テストは、
「http://pc-sup.com/sub/index.html」、
旅の思いで写真集「当講座の教材Pageです」
CGI活用講座→第9回に進んでください。 |
|
今回は、CGIで動作する、グラフィックカウンタです。
テキストカウンタは、SSIを使用するものをHTML活用講座・HPB活用講座で紹介してますが、
色々と設定があって、簡単に使えるものではありません。
|
|
一方グラフィックカウンタは、
CGIが使えるサーバであれば、簡単に設置できます。
設置方法を含めて、プログラムを解説して見ます。
ファイル名「gcount.cgi ver1.0」です。
1行目は、小生の自前サーバで動かすための設定、設置場所にあわせてください。
ちなみに、lolipopの場合は、「#!/usr/bin/perl」になります。
改行コード「LF」ですから、間違えないように、TeraPad等を使ってください。
8行目は、画像連結ライブラリ、Gif画像専門です。
11行目は、乱数の初期化です。
12行目は、sleepコマンドを0.1秒単位に変えるもの。
15行目から個人設定項目、内容はコメントに書いておきました。
17行目と23行目のファイル名は、ディレクトリの設定に注意してください。
19行目の秒数は、1時間なら、60×60=3600秒に設定してください。
27行目のファイルの置き場所は、ディレクトリの設定に注意してください。
33行目は、環境変数から、グローバルIPを引き出すもの。
34行目は、ホスト名に変換しています。
37行目、$time = time; timeは、サーバの持つ時間関数、localtime(time)とすると、
時間や曜日も取り出せます。 |
|
|
|
43行目から、メイン処理、$countは、カウント記録ファイルを示します。
45行目で、0.1秒sleepを使いたいために、12行目の設定があるわけです。
10回オープンをトライする内に、成功したらそこで終了となります。
47行目は、ファイルハンドルINから、$cntにカウント記録を読み出します。
51行目、$ccheckが0に等しいの逆、なら、サブルーチンccheckを呼び出します。
モット簡単に、if ($ccheck) { としても同じでしょうね。
52行目、サブルーチンccheckの返り値($res)が1の逆なら、
サブルーチンcountupを呼び出す。
どちらも規定値で比較して、で無ければを使用しているんです。
54行目は、カウンタの初期オフセットの処理です。
58行目は、数値を6桁の文字列に変えるものです。6を7にすれば7桁表示になります。
62行目は、sprit(//,$cnt)、何も無いもので区切りますから、
ひと文字ずつ取り出せますね。
63行目は、画像名を、@image配列の最後に挿入ですね。
67行目で、gif出力を宣言し、出力方法をバイナリーに指定。
gifcat画像連結ライブラリを使用して、一括送信します。
71行目で、プログラム終了です。
75行目のexit;は、サブルーチン前に置いたものが残っているだけ、意味ないです。 |
|
|
|
ここから、サブルーチンです。
最近の訪問時間チェック、$logfileは、訪問者ファイルを示します。
ファイル名をrenameで変えてしまう方法を採用したため、読み出せない場合もありえるので、
読み出し側でも、0.1秒10カウントをとってます。
無事読み出せたら、89行目から、サーチに入ります。
90行目、@tempの配列から、一行づつ取り出して、$tempに代入、
区切り文字<>で切り分けて、ホスト名で一致するものを探します。
見つかったら、時間を比較して、条件が合えば、$res=1として、
カウンタを更新しないようにします。
97行目から、}が並びますが、小生の字下げ方法では、数を間違えません。 |
|
|
|
こちらは、カウントアップサブルーチンです。
105行の$uselockは、ロック機能の使用の有無、
106行で、乱数(100)+1、これで1〜100の乱数が発生できるはず、$fooに代入します。
107行、$logdirは、ログファイルの保存場所です。
$countファイルの使用中を考慮して、0.1秒10カウント、rename成功すれば抜けます。
114行、$dummyに書き込み準備
118行で、カウントを一つ増やし、ファイルハンドルOUTに出力します。
122行、元の$countにrenameして処理終了。
rename処理は行数が増えてしまいますね。
127行からは、$uselookが未使用の場合、
rename処理がない分だけ簡単ですね。
ファイルの入出力は、()があったり、「,」が無かったり、書式が覚えにくい、
<>で囲むものもあります。 |
|
|
|
書き込みサブルーチンの続きですが、
こちらはログファイル$logfileを更新します。
155行に、レコード数のチェックが入り、最大値$dmaxと同じであれば、最終行を削除。
新データを先頭行に挿入して、$dummyに書き込み、$logfileにrenameして終了です。
173行以降も、rename処理が入らない以外は同じですね。
renameによる、ファイル保護と確実なファイル処理を考えて見ましたが、
少々、ファイルが長くなりますね。
ファイル移動とは違い、処理は早いと思うんですが・・・
今後の拡張&修正点
jcood.plとの共存策が必要ですね、
ログファイルを、アクセス解析のデータ取りに利用するなら尚の事、
日ごとの、ログファイルに変更して、アクセス数の日変化を表やグラフで表すのも面白い。
ただ、この場合、管理者メニューが必要になりますね。
カウンタの外枠は、テーブルタグで画像を挟んだだけ、HTMLで簡単に出来ます。
ソース表示で確認して見てください。 |
|
|
|
今回で、CGI活用講座は最終回
新たなソフトは、完成した時点で、取り扱いと設置方法を紹介する事にしますので、
そちらにご期待ください。
では、また合いましょう。 |
|
|