CGIスクリプト
ここではこのサイトで使っている CGIスクリプトを公開します。といっても今のところ次の四つだけで、これ以上、作る予定はないのですが。
アクセスログ取得
アクセスカウンタ
それぞれのスクリプトの特徴は次の通りです。
- ログ取得
ファイル更新を updateモードで行い、seek/truncate機能を使い、データ件数のチェックのため、ログを取る毎に毎回全データをreadするのを回避、高速化、サーバの負荷を軽減、ファイルのハンドリングを自動化している。アクセスカウンタも同様の方法をとっています、シンプルな方法なので、お勧めだと思います。
- アクセスカウンタ
アラビア文字など逆順に数字を表記する(桁の小さな数字から並べる)場合でも、簡単に対応できる
どれも、数十行の小さなスクリプトですが、お役に立てば幸いです。
ここに掲載したスクリプトは全て Public Domain です。ご自分の責任で自由にお使い下さい。動かない、サーバをダウンさせちゃったなど あらゆるトラブルに対して、作者はいっさい責任を持ちませんので、ご承知下さい。このページへの直接のリンク、改造したものの転載も自由です。どこにリンク、転載されているか知りたいので、事後でもかまいませんから、作者にご連絡頂けると嬉しいです。このサイトの著作権の取り扱いについては Copyright を参照してください。
アクセスログ/ダウンロードログを取得、ログが一杯になったら自動メール CGI版
自分のサイトの各ページやデータがどんな具合にアクセスされているか気になりませんか。
アクセスログ/ダウンロードログを取得し、自動的にメールするCGIです。適当なものがないかとインタネットを捜し回ったのですが、見つからないので、自作しました。
自作と言っても、Walter Soldiererさんの mail-log.cgi にCGIだけで動かす変更を施し、ダウンロードログを取得するための若干の変更を加えただけのものです。Soldiererさんから許可を頂きましたので、改造したスクリプトを公開します。
今、取得中のログはここにあります。
使い方
- sourceボタンを押して、スクリプリトを表示、名前を付けて保存
- ファイル名をcgilog.cgiに変更
- cgilog.cgiの設定を自分の環境に合わせて変更
- ここをクリックして、名前を付けて保存。log.txtという名前の空(バイト数 = 0)のログファイルです
- ここの右の透明な部分(new.gif という名前の透過型のGIFファイルです)を右クリックして、名前をつけて保存
- ログを取りたいページ、データのHTMLを変更
- サーバにログファイル、cgilog.cgi、GIFファイルを転送、ログファイルとcgilog.cgiのパーミッション値をそれぞれ666、755に変更
- ログ取得のため変更したHMTLページをサーバに転送
スクリプト及びHTMLの設定方法についてはソースコードのコメントを参照して下さい。Walter Soldiererさんの mail-log.cgi を流用しているので、全て英語です。
アクセスログを取得、日付が変わったら自動メール SSI版
前掲のスクリプトを使ってサイトを立ち上げたのですが、ログを眺めていて、イメージを表示しないを指定していると、ログがとられないということに気がついた(^^;;;。
ダウンロードログだけでページログのないやつがある。あれバグかいなと思ったが、良く考えてみたらイメージを表示しないで、プラウジングしているみたいですね。ロボット君かしら。
という訳で、やっばりページのアクセスログはSSIでやらなきゃダメと分かった。ついでに自動メールするタイミングを日付が変わったら送信する方式にしました。
使い方
- sourceボタンを押して、スクリプリトを表示、名前を付けて保存
- ファイル名をssilog.plに変更
- ssilog.plの設定を自分の環境に合わせて変更
- ここを右クリックして、名前を付けて保存。
- ログを取りたいページに以下のHTML文を追加
<!--#exec cmd="./ssilog.pl"-->
./ssilog.plの部分は設定した環境に合わせて変更して下さい。このままだとHTMLページを置いてあるディレクトリに ssilog.pl を置く必要があります。絶対パス/相対パスどちらで指定してもOKです。
- サーバにログファイル、ssilog.plを転送、それぞれのパーミッション値を666、755に変更
- ログ取得のため変更したHMTLページをサーバに転送
スクリプトの設定方法については前掲のcgilog.cgiのコメントを参照して下さい。gifファイルの設定は不要となります。
このスクリプトはアクセスログ専用です。exec cmd で呼び出す Perlスクリプトなので、ダウンロードログと兼用するのはあまり意味がないと思ったからです。僕はCGI用のスクリプトをダウンロードログ専用とし、ログファイルは共通にして、メールする機能を削除して、使っています。このページの英語版にこれらのアレンジしたスクリプトを紹介しています。興味のある方はここをクリックして下さい。
CGIだけで動作するアクセスカウンタ
Niftyがホームページサービスを開始したので、日本語版のトップページを置いたのですが、カウンタが使えない。仕方がないので、Do it myself. 20行ちょっとのシンプルなものですが、よろしければお使いください。
ここをクリックすると13桁のカウンタのサンプルを表示できます。
使い方
- sourceボタンを押して、スクリプリトを表示、名前を付けて保存
- ファイル名を cgicount.cgi に変更
- 必要なら cgicount.cgi の設定を自分の環境に合わせて変更(ディフォルトの設定でOKなら不要です)
- ここをクリックして、カウンタファイルを表示、名前をつけて保存(counter.txt という名前で保存されます)
- 表示用の GIFファイルを入手する。ここ(Digit Mania)に山ほどあります。
GIFファイルの名前を 0.gif 1.gif ... 9.gif と変更
- カウンタを取り付けたい部分に以下のHTML文を追加
カウンタの桁数を4桁とした時の例です
<IMG SRC="./cgicount.cgi&4+1" ALT="?">
<IMG SRC="./cgicount.cgi&3" ALT="?">
<IMG SRC="./cgicount.cgi&2" ALT="?">
<IMG SRC="./cgicount.cgi&1" ALT="?">
./cgicount.cgiの部分は設定した環境に合わせて変更して下さい。このままだとHTMLページを置いてあるディレクトリに cgicount.cgi を置く必要があります。
&4 の部分は表示する数字が何桁目かを示します。+1 でその桁が表示された時、カウントアップすることを指示します。
従って、桁数を変えたい時は先頭の行を &n+1 として、以下 (n-1), (n-2) ... 1まで続ければ良い。よく分からんという方はサンプルのページのHTMLソースを参照して下さい。ただし、サンプルはアラビア文字を表示しているため、数字が逆順に表示されるよう設定してあります。ご注意ください(^^;。
- サーバにカウンタファイル、cgicount.cgi を転送。パーミッション値をそれぞれ666、755に変更
- cgicount.cgi を置いたディレクトリに image というサブディレクトリを作成。imageディレクトリに表示用の GIFファイルを転送
- カウンタ表示のため変更したHMTLページをサーバに転送
引数 ARGV[1] を使ってカウントアップするタイミングを指定しいる点がポイントです。桁数の変更はHTML側だけで済むし、数字を逆順に並べた時、一桁目でカウントアップすれば、次のSSI方式で述べる問題点をある程度回避することができます。このサイトのトッページは、アラビア文字表示するため、逆順に数字を並べているのですが、そのために思いついた苦肉の策ですけど(^^;;;。
SSI方式のアクセスカウンタ
SSIはサーバによってはサポートされていないこともあります。その場合はあきらめて(^^;、CGIだけで動作するアクセスカウンタをお使い下さい。
さて、前掲のCGI方式のアクセスカウンタには次の問題点があります(まあ実用上はそんなに問題にならないレベルだと思いますが、サンプルで試してみて頂くと実験できます)。
- 一桁表示する毎にCGIを呼び出しに行くので、
遅い
バラバラに表示されることがある
サーバの負荷もそれだけ増大するはず。
- GIF表示する順番とカウントアップするタイミングがクライアント側からの表示要求に依存するため、
表示される内容がカウンタファイルの内容と一致しない可能性がある(ただし、CGI方式でも設定を間違えない限り、カウンタファイルに加算される内容は正確です)。
CGI方式でも回避する方法もあるのですが、どうしても スクリプトが大きくなり、複雑になります。
という次第で、地元のプロバイダに置いてあるトップページはSSI方式にすることにしました。
SSI方式にするとスクリプトはCGI方式よりも更にシンプルとなりますが、速さは気分だけです(^^;;;。ここをクリックするとサンプルを表示できます。13桁の表示です。CGI方式のサンプルと比較してみてください。
使い方
- sourceボタンを押して、スクリプリトを表示、名前を付けて保存
- ファイル名を ssicount.cgi に変更
- 必要なら ssicount.cgi の設定を自分の環境に合わせて変更(ディフォルトの設定でOKなら不要です)
- ここをクリックして、カウンタファイルを表示、名前をつけて保存(counter.txt という名前で保存されます)
- 表示用の GIFファイルを入手。ここ(Digit Mania)に山ほどあります。
名前を 0.gif 1.gif ... 9.gif と変更
- カウンタを取り付けたい部分に以下のHTML文を追加
<!--#exec cgi="./ssicount.cgi"-->
./ssicount.cgiの部分は設定した環境に合わせて変更して下さい。このままだとHTMLページを置いてあるディレクトリに ssicount.cgi を置く必要があります。絶対パス/相対パスどちらで指定してもOKです。
- サーバにカウンタファイル、count_s.cgi をサーバに転送。パーミッション値をそれぞれ666、755に変更
- ssicount.cgi を置いたディレクトリに image というサブディレクトリを作成。imageディレクトリに表示用の GIFファイルを転送
- カウンタ表示のため変更したHMTLページをサーバに転送
このスクリプトも簡単に逆順に数字を並べるよう改造できます。まあ、あまりニーズはなさそうですが(^^;;;、興味のある方はここをクリックしてください。
Home