YukisRoom 「ホームページ作成講座」 CGI活用講座

HTML基礎講座

HTML活用講座

CGI基礎講座

CGI活用講座

CGI活用講座第9回、CGI作成編(4)です。

CGI活用講座、第9回は、作成編です。

ダウンロード&テストは、教材DownLoad です。
CGI活用講座→第9回に進んでください。
ダウンロードした教材は、アップロード用です、基礎講座を参考に、Perlのパスをサーバにあわせてください。

では、CGI活用講座第8回の開始です。

今回は、CGIで動作する、グラフィックカウンタです。
テキストカウンタは、SSIを使用するものをHTML活用講座で紹介してますが、色々と設定があって、簡単に使えるものではありません。

alphaEDIT

一方グラフィックカウンタは、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)とすると、時間や曜日も取り出せます。

alphaEDIT

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;は、サブルーチン前に置いたものが残っているだけ、意味ないです。

alphaEDIT

ここから、サブルーチンです。
最近の訪問時間チェック、$logfileは、訪問者ファイルを示します。
ファイル名をrenameで変えてしまう方法を採用したため、読み出せない場合もありえるので、読み出し側でも、0.1秒10カウントをとってます。

無事読み出せたら、89行目から、サーチに入ります。
90行目、@tempの配列から、一行づつ取り出して、$tempに代入、区切り文字<>で切り分けて、ホスト名で一致するものを探します。

見つかったら、時間を比較して、条件が合えば、$res=1として、カウンタを更新しないようにします。

97行目から、}が並びますが、小生の字下げ方法では、数を間違えません。


alphaEDIT

こちらは、カウントアップサブルーチンです。

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処理がない分だけ簡単ですね。

ファイルの入出力は、()があったり、「,」が無かったり、書式が覚えにくい、<>で囲むものもあります。



alphaEDIT

書き込みサブルーチンの続きですが、こちらはログファイル$logfileを更新します。

155行に、レコード数のチェックが入り、最大値$dmaxと同じであれば、最終行を削除。

新データを先頭行に挿入して、$dummyに書き込み、$logfileにrenameして終了です。

173行以降も、rename処理が入らない以外は同じですね。

renameによる、ファイル保護と確実なファイル処理を考えて見ましたが、少々、ファイルが長くなりますね。

ファイル移動とは違い、処理は早いと思うんですが・・・

今後の拡張&修正点

jcood.plとの共存策が必要ですね、ログファイルを、アクセス解析のデータ取りに利用するなら尚の事、

日ごとの、ログファイルに変更して、アクセス数の日変化を表やグラフで表すのも面白い。

ただ、この場合、管理者メニューが必要になりますね。



カウンタの外枠は、テーブルタグで画像を挟んだだけ、HTMLで簡単に出来ます。

ソース表示で確認して見てください。

alphaEDIT

今回で、CGI活用講座は最終回

新たなソフトは、完成した時点で、取り扱いと設置方法を紹介する事にしますので、そちらにご期待ください。

では、また合いましょう。


CGI活用講座、第9回を終了します。


前のページ ページトップ ホームページ講座
お問い合わせはこちらに、 小生宛のMail
Copyright© 2010 YukisRoom 葵Yuki. All Rights Reserved